endl; } }: class Admission :
Автор admin Пятница, 19 июня 2009 11:32
endl; } }: class Admission : public NameStrategy { public: void greetO { cout « “I’m sorry. I forgot your name.” « endl: } }: // Контекст управляет выбором стратегии: class Context { NameStrategy& strategy: public: Context(NameStrategy& strat) : strategy(strat) {} void greetO { strategy, greet О: } }: int mainO { SayHi sayhi; Ignore ignore: Admission admission; Context cl(sayhi), c2(ignore). c3(admission); cl. greetO: c2.greetО; сЗ. greet О; } ///:- Метод Context::greet() обычно имеет более сложную структуру; как и шаблонный метод, он содержит неизменяемый код. Но функция main() наглядно показы- 494 Глава 10 • Паттерны проектирования вает, что выбор стратегии может осуществляться на стадии выполнения программы. Можно пойти еще дальше, объединить этот паттерн с Состоянием и изменять Стратегию в течение жизненного цикла объекта Context. Цепочка ответственности Паттерн Цепочка ответственности (Chain of responsibility) может рассматриваться как «динамическое обобщение рекурсии» с использованием объектов Стратегии. Программа выдает вызов, и каждая стратегия в связанном списке пытается обслужить этот вызов.
Комментарии закрыты.
Последние комментарии