Strategy pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
|||
(19 versioni intermedie di 16 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]]. 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]] 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 34 ⟶ 30:
}
// Ordina usando l'
private void sortQuickSort(List<Document> list)
{
Line 41 ⟶ 37:
}
}
// "classe concreta Strategy"
Line 53 ⟶ 48:
}
// Ordina usando l'
private void sortMergeSort(List<Document> list)
{
Line 66 ⟶ 61:
//Lista di documenti
private List<Document> documentList = new List<Document>();
//
private ISortStrategy
public SortedDocumentList( List<Document> documents ){
this.documentList = documents;
}▼
public void setSortStrategy(ISortStrategy
{
this.
}
public void
{
documentList.
}
//Ordina la lista di documenti usando un
public void sort()
{
//Ordina i documenti
// Display results
Line 96 ⟶ 94:
class Document
{
private
private
public Document(
{
this.title = title;
this.
}
public String getTitle()
Line 108 ⟶ 106:
return title;
}
public void
{
this.
}
}
</syntaxhighlight>
Utilizzo dello Strategy: nel seguente esempio vediamo come ordinare una lista di documenti con due diversi
<
public class SortDocument {
public void sort(List<Document> documents) {
▲ QuickDocumentSort quickDocumentSort = new QuickdocumentSort(documents);
SortedDocumentList sortedDocumentList = new SortedDocumentList(documents);▼
▲ SortedDocumentList sortedDocumentList = new SortedDocumentList();
▲ //Aggiungi l'algoritimo per effetturare l'ordinamento
sortedDocumentList.sort();▼
▲ MergeDocumentSort mergeDocumentSort = new MergeDocumentSort (documents);
▲ sortedDocumentList.setSortStrategy(mergeDocumentSort);
sortedDocumentList.sort();
▲ //Ordina di nuovo la lista usando un altro algortimo di ordinamento
▲ sortedDocumentList.sort();
}
}
</syntaxhighlight>
== Considerazioni ==
{{...|informatica}}
== Bibliografia ==
Line 156 ⟶ 153:
== Altri progetti ==
{{interprogetto|
{{Design
{{portale|informatica}}
[[Categoria:
|