Strategy pattern: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
m Modifica dell'esempio dell'utilizzo del pattern strategy
Riga 17:
{{...}}
 
L'esempio seguente è in [[Java (linguaggio_di_programmazione)|Java]].
//Contesto
<source lang="java">
class SortedDocumentList
 
// "Strategy"
public interface ISortStrategy
{
public void sort(List<Document> documentList);
}
 
// "classe concreta Strategy"
public class QuickDocumentSort implements ISortStrategy
{
public void sort(List<Document> documentList)
{
// Call overloaded Sort
sortQuickSort(documentList);
}
 
// Ordina usando l'algoritimo del quickSort
private void sortQuickSort(List<Document> list)
{
//Ordina i documenti usando l'algoritmo del quicksort
Collection.quickSort(list,left,right);
}
}
 
 
// "classe concreta Strategy"
public class MergDocumentSort implements ISortStrategy
{
public void sort(List<Document> documentList)
{
// Call overloaded Sort
sortMergeSort(documentList);
}
 
// Ordina usando l'algoritimo del quickSort
private void sortMergeSort(List<Document> list)
{
//Ordina i documenti usando l'algoritmo del quicksort
Collection.mergeSort(list,left,right);
}
}
 
//Contesto in cui viene usato il pattern strategy. Abbiamo una lista di documenti che deve essere ordinata.
public class SortedDocumentList
{
//Lista di documenti
private List<Document> documentList = new List<Document>();
//Algortimo per l'ordinamento dei documenti
private ISortStrategy sortstrategy;
 
public void setSortStrategy(ISortStrategy SortStrategysortstrategy)
{
setthis.sortstrategy = sortstrategy;
{
this.sortstrategy = value;
}
}
 
Line 37 ⟶ 82:
}
 
//Ordina la lista di documenti usando un algortimo di ordinamento
public void Sort()
public void sort()
{
sortstrategy.Sort(documentList);//Ordina i documenti
sortstrategy.sort(documentList);
 
// Display results
foreachfor (Document document in: documentList )
{
ConsoleSystem.WriteLine(stringout.Formatprintln(" {0}",document.TitlegetTitle());
}
Console.WriteLine();
}
}
 
 
//classe concreta
class Document
{
Line 62 ⟶ 106:
this.codice = codice;
}
public stringString TitlegetTitle()
{
get { return title; }
}
public stringvoid CodicesetCodice(String codcie)
{
getthis.codice { return= codice; }
}
}
 
</source>
// "Strategy"
Utilizzo dello Strategy: nel seguente esempio vediamo come ordinare una lista di documenti con due diversi algortimi di ordinamento senza che la classe che si occupa di ordinare i documenti conosca l'implemetazione dell'algortimo di ordinamento.
interface ISortStrategy
<source lang="java">
{
void Sort(List<Document> documentList);
}
 
public class SortDocument {
// "classe concreta Strategy"
class QuickDocumentSort : ISortStrategy
{
public void Sort(List<Document> documentList)
{
// Call overloaded Sort
Sort(documentList, 0, documentList.Count - 1);
Console.WriteLine("QuickSorted list ");
}
 
public void sort(List<Document> documents){
// Recursively sort
private void Sort(List<Document> list, int left, int right)
QuickDocumentSort quickDocumentSort = new QuickdocumentSort(documents);
{
//ordinamento da implementare
SortedDocumentList sortedDocumentList = new SortedDocumentList();
}
 
//Aggiungi l'algoritimo per effetturare l'ordinamento
sortedDocumentList.setSortStrategy(quickDocumentSort);
 
//Ordina i documenti usando l'algortimo quickDocumentSort
sortedDocumentList.sort();
 
MergeDocumentSort mergeDocumentSort = new MergeDocumentSort (documents);
 
sortedDocumentList.setSortStrategy(mergeDocumentSort);
 
//Ordina di nuovo la lista usando un altro algortimo di ordinamento
sortedDocumentList.sort();
}
}
 
</source>
 
 
== Considerazioni ==