Стратегия (Strategy)

При помощи шаблона Стратегия из клиента выделяется алгоритм, который затем инкапсулируется в типах, наследуемых от общего класса (реализующих общий интерфейс). Это позволяет клиенту выбирать нужный алгоритм путём создания объектов необходимых типов. Кроме этого, шаблон допускает изменение набора доступных алгоритмов со временем.

Рис. 17. Диаграмма шаблона Стратегия.

Предположим, что требуется разработать программу, которая показывает календарь. Одно из требований к программе – она должна отображать праздники, отмечаемые различными нациями и религиозными группами. Это требование можно выполнить, помещая логику генерирования каждого набора праздников в отдельный класс. Основная программа будет выбирать необходимый класс из набора, исходя, например, из действий пользователя (или конфигурационных настроек). Ниже приведён пример кода, реализующий поставленную задачу при помощи шаблона Стратегия.

using System.Collections.Generic;

public interface IHolidaySet

{

List<string> GetHolidays();

}

public class USAHolidays: IHolidaySet

{

public List<string> GetHolidays()

{

return new List<string>

{

"01.01.13",

"21.01.13",

"18.02.13",

"27.05.13",

"04.07.13",

"02.09.13",

"14.10.13",

"11.11.13",

"28.11.13",

"25.12.13"

};

}

}

public class RussiaHolidays: IHolidaySet

{

public List<string> GetHolidays()

{

return new List<string>

{

"01.01.13",

"07.01.13",

"23.02.13",

"08.03.13",

"11.03.13",

"01.05.13",

"09.05.13",

"12.06.13",

"04.11.13"

};

}

}

public class Client

{

private readonly IHolidaySet _holidaySetStrategy;

public Client(IHolidaySet strategy)

{

_holidaySetStrategy = strategy;

}

public bool CheckForHoliday(string date)

{

return _holidaySetStrategy.GetHolidays().Contains(date);

}

}

public class StrategyExample

{

public static void Main()

{

var client = new Client(new USAHolidays());

var result = client.CheckForHoliday("04.07.13");

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: