Strategy pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m r2.7.2) (Bot: Aggiungo gl:Strategy (patrón de deseño) |
|||
Riga 14:
== Esempio ==
{{...}}
//classe concreta
class Document
{
private string title;
private string codice;
public Document(string title, string codice)
{
this.title = title;
this.codice = codice;
}
public string Title
{
get { return title; }
}
public string Codice
{
get { return codice; }
}
}
class SortedDocumentList
{
private List<Document> documentList = new List<Document>();
private ISortStrategy sortstrategy;
public ISortStrategy SortStrategy
{
set
{
this.sortstrategy = value;
}
}
public void Add(Document document)
{
documentList.Add(document);
}
public void Sort()
{
sortstrategy.Sort(documentList);
// Display results
foreach (Document document in documentList)
{
Console.WriteLine(string.Format(" {0}",document.Title));
}
Console.WriteLine();
}
}
// "Strategy"
interface ISortStrategy
{
void Sort(List<Document> documentList);
}
// "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 ");
}
// Recursively sort
private void Sort(List<Document> list, int left, int right)
{
int lhold = left;
int rhold = right;
// Use a random pivot
Random random = new Random();
int pivot = random.Next(left, right);
Swap(list, pivot, left);
pivot = left;
left++;
while (right >= left)
{
int compareleft = list[left].Title.CompareTo(list[pivot].Title);
int compareright = list[right].Title.CompareTo(list[pivot].Title);
if ((compareleft >= 0) && (compareright < 0))
{
Swap(list, left, right);
}
else
{
if (compareleft >= 0)
{
right--;
}
else
{
if (compareright < 0)
{
left++;
}
else
{
right--;
left++;
}
}
}
}
Swap(list, pivot, right);
pivot = right;
if (pivot > lhold) Sort(list, lhold, pivot);
if (rhold > pivot + 1) Sort(list, pivot + 1, rhold);
}
// Swap helper function
private void Swap(List<Document> list, int left, int right)
{
Document temp = list[right];
list[right] = list[left];
list[left] = temp;
}
}
== Considerazioni ==
|