Стратегія (Strategy)
1. Коли потрібно винести частину логіки з класу (Worker).
2. Коли під час виконання програми потрібно замінити якусь логіку (A бо B).
interface IJob
{
void DoJob();
}
class A : IJob {
public void DoJob()
{
Console.WriteLine("Job A");
}
}
class B : IJob
{
public void DoJob()
{
Console.WriteLine("Job B");
}
}
class Worker { // Основний клас, з якого ми виносимо частину логіки
public void DoWork(IJob job)
{
if (job != null) {
job.DoJob();
}
}
}
static void Main(string[] args)
{
Worker w = new Worker();
w.DoWork(new A());
w.DoWork(new B());
Console.ReadKey();
}
Job A
Job B
Коли дані надходять з різних джерел: текст, файл, БД
Коли в класі є місце, яке буде змінюватися в майбутньому і потрібна окрема ієрархія
При реалізації можна використовувати делегати чи інтерфейси
IComparer, IComparable, ISortable, Comparisen
+ додаткова гнучкість
- додаткова складність