Strategy pattern: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m a capo in eccesso
m Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto"
 
(13 versioni intermedie di 12 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 [[gangGang of fourFour (scrittori)|Gang of Four]].
 
Lo '''strategy pattern''' è uno dei pattern comportamentali. L'obiettivo di questa architettura è isolare un [[algoritmo]] all'interno di un oggetto., Ilin patternmaniera strategytale è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. IlAnche il design pattern [[Iterator pattern|Iterator]] si basa proprio su questo concetto di isolamento.
 
Questo pattern prevede che gli algoritmi siano intercambiabili tra loro, (in base ad una qualchespecificata condizione), in modomodalità trasparente al client che ne fa uso. In altre parole:, ladata una famiglia di algoritmi che implementa una certa funzionalità, come può essere (ad esempio un algoritmo di visita ooppure di ordinamento), essa dovrà esportaesportare sempre la medesima interfaccia, in questo modocosì il [[client]] dell'algoritmo non devedovrà 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]].
{{...}}
<sourcesyntaxhighlight lang="java">
 
L'esempio seguente è in [[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 sortstrategysortStrategy;
 
public SortedDocumentList( List<Document> documents ){
Line 71 ⟶ 68:
}
public void setSortStrategy(ISortStrategy sortstrategysortStrategy)
{
this.sortstrategysortStrategy = sortstrategysortStrategy;
}
 
public void Addadd(Document document)
{
documentList.Addadd(document);
}
 
Line 85 ⟶ 82:
{
//Ordina i documenti
sortstrategysortStrategy.sort(documentList);
 
// Display results
Line 97 ⟶ 94:
class Document
{
private stringString title;
private stringString codicecode;
 
public Document(stringString title, stringString codicecode)
{
this.title = title;
this.codicecode = codicecode;
}
public String getTitle()
Line 109 ⟶ 106:
return title;
}
public void setCodicesetCode(String codicecode)
{
this.codicecode = codicecode;
}
}
 
</syntaxhighlight>
</source>
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'implemetazioneimplementazione dell'algoritmo di ordinamento.
<sourcesyntaxhighlight lang="java">
 
public class SortDocument {
 
public void sort(List<Document> documents) {
QuickDocumentSort quickDocumentSort = new QuickdocumentSort();
QuickDocumentSort quickDocumentSort = new QuickdocumentSort();
SortedDocumentList sortedDocumentList = new SortedDocumentList( documents );
//Aggiungi l'algoritmo per effettuare l'ordinamento
SortedDocumentList sortedDocumentList = new SortedDocumentList( documents );
sortedDocumentList.setSortStrategy(mergeDocumentSortquickDocumentSort);
 
//Aggiungi l'algoritmo per effettuare l'ordinamento
sortedDocumentList.setSortStrategy( //Ordina i documenti usando l'algoritmo quickDocumentSort);
sortedDocumentList.sort();
 
//Ordina i documenti usando l'algoritmo quickDocumentSort
MergeDocumentSort mergeDocumentSort = new MergeDocumentSort ();
sortedDocumentList.sort();
 
sortedDocumentList.sortsetSortStrategy(mergeDocumentSort);
MergeDocumentSort mergeDocumentSort = new MergeDocumentSort ();
 
//Ordina idi documentinuovo la lista usando l'un altro algoritmo quickDocumentSortdi ordinamento
sortedDocumentList.setSortStrategy(mergeDocumentSort);
sortedDocumentList.sort();
 
//Ordina di nuovo la lista usando un altro algoritmo di ordinamento
sortedDocumentList.sort();
}
}
 
</syntaxhighlight>
</source>
 
== Considerazioni ==
{{...|informatica}}
 
== Bibliografia ==
Line 157 ⟶ 153:
 
== Altri progetti ==
{{interprogetto|commonspreposizione=Strategy patternsullo}}
 
{{Design Patterns Patternspattern}}
{{portale|informatica}}
 
[[Categoria:PatternDesign pattern]]