Strategy pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m ortografia |
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
||
(14 versioni intermedie di 13 utenti non mostrate) | |||
Riga 1:
{{S|programmazione}}
Nella [[Programmazione orientata agli oggetti|programmazione ad oggetti]], lo '''strategy pattern''' è uno dei [[design pattern|pattern]] fondamentali, definiti originariamente dalla [[
▲Nella [[Programmazione orientata agli oggetti|programmazione ad oggetti]], lo '''strategy pattern''' è uno dei [[design pattern|pattern]] fondamentali, definiti originariamente dalla [[gang of four]].
Questo pattern prevede che gli algoritmi siano intercambiabili tra loro,
▲Lo '''strategy pattern''' è uno dei pattern comportamentali. L'obiettivo di questa architettura è isolare un [[algoritmo]] all'interno di un oggetto. Il pattern strategy è utile in quelle situazioni dove sia necessario modificare dinamicamente gli algoritmi utilizzati da un'[[applicazione (informatica)|applicazione]]. Si pensi ad esempio alle possibili visite in una struttura ad albero (visita anticipata, simmetrica, posticipata): mediante il pattern strategy è possibile selezionare a tempo di [[esecuzione (informatica)|esecuzione]] una tra le visite ed eseguirla sull'albero per ottenere il risultato voluto. Il design pattern [[Iterator pattern|Iterator]] si basa proprio su questo.
▲Questo pattern prevede che gli algoritmi siano intercambiabili tra loro (in base ad una qualche condizione) in modo trasparente al client che ne fa uso. In altre parole: la famiglia di algoritmi che implementa una funzionalità (ad esempio di visita o di ordinamento) esporta sempre la medesima interfaccia, in questo modo il [[client]] dell'algoritmo non deve fare nessuna assunzione su quale sia la strategia istanziata in un particolare istante.
== Struttura ==
[[File:StrategyPattern.png|center|Struttura del Design Pattern Strategy]]
== Esempio ==
L'esempio seguente è stato codificato con il linguaggio di programmazione [[Java (linguaggio di programmazione)|Java]].
▲<source lang="java">
// "Strategy"
Line 41 ⟶ 37:
}
}
// "classe concreta Strategy"
Line 67 ⟶ 62:
private List<Document> documentList = new List<Document>();
//Algoritmo per l'ordinamento dei documenti
private ISortStrategy
public SortedDocumentList( List<Document> documents ){
Line 73 ⟶ 68:
}
public void setSortStrategy(ISortStrategy
{
this.
}
public void
{
documentList.
}
Line 87 ⟶ 82:
{
//Ordina i documenti
// Display results
Line 99 ⟶ 94:
class Document
{
private
private
public Document(
{
this.title = title;
this.
}
public String getTitle()
Line 111 ⟶ 106:
return title;
}
public void
{
this.
}
}
</syntaxhighlight>
Utilizzo dello Strategy: nel seguente esempio vediamo come ordinare una lista di documenti con due diversi algoritmi di ordinamento senza che la classe che si occupa di ordinare i documenti conosca l'
<
public class SortDocument {
public void sort(List<Document> documents) {
QuickDocumentSort quickDocumentSort = new QuickdocumentSort();▼
▲ QuickDocumentSort quickDocumentSort = new QuickdocumentSort();
//Aggiungi l'algoritmo per effettuare l'ordinamento▼
▲ SortedDocumentList sortedDocumentList = new SortedDocumentList( documents );
▲ //Aggiungi l'algoritmo per effettuare l'ordinamento
sortedDocumentList.sort();▼
//Ordina i documenti usando l'algoritmo quickDocumentSort▼
▲ MergeDocumentSort mergeDocumentSort = new MergeDocumentSort ();
▲ sortedDocumentList.setSortStrategy(mergeDocumentSort);
sortedDocumentList.sort();
▲ sortedDocumentList.sort();
}
}
</syntaxhighlight>
== Considerazioni ==
{{...|informatica}}
== Bibliografia ==
Line 159 ⟶ 153:
== Altri progetti ==
{{interprogetto|
{{Design
{{portale|informatica}}
[[Categoria:
|