Strategy pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
||
(9 versioni intermedie di 8 utenti non mostrate) | |||
Riga 5:
L'obiettivo di questa architettura è isolare un [[algoritmo]] all'interno di un oggetto, in maniera tale da risultare 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. Anche il design pattern [[Iterator pattern|Iterator]] si basa su questo concetto di isolamento.
Questo pattern prevede che gli algoritmi siano intercambiabili tra loro, in base ad una specificata condizione, in modalità trasparente al client che ne fa uso. In altre parole, data una famiglia di algoritmi che implementa una certa funzionalità, come può essere ad esempio un algoritmo di visita oppure di ordinamento,
== Struttura ==
[[File:StrategyPattern.png|center|Struttura del Design Pattern Strategy]]
== Esempio ==
L'esempio seguente è stato codificato con il linguaggio di programmazione [[Java (
▲L'esempio seguente è stato codificato con il linguaggio di programmazione [[Java (linguaggio_di_programmazione)|Java]].
▲<source lang="java">
// "Strategy"
Line 65 ⟶ 62:
private List<Document> documentList = new List<Document>();
//Algoritmo per l'ordinamento dei documenti
private ISortStrategy
public SortedDocumentList( List<Document> documents ){
Line 71 ⟶ 68:
}
public void setSortStrategy(ISortStrategy
{
this.
}
public void
{
documentList.
}
Line 85 ⟶ 82:
{
//Ordina i documenti
// Display results
Line 97 ⟶ 94:
class Document
{
private
private
public Document(
{
this.title = title;
this.
}
public String getTitle()
Line 109 ⟶ 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'implementazione dell'algoritmo di ordinamento.
<
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 157 ⟶ 153:
== Altri progetti ==
{{interprogetto|
{{Design
{{portale|informatica}}
[[Categoria:
|