Стратегія (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

+ додаткова гнучкість 

- додаткова складність