кто должен создавать и назначать реализации стратегии выполнения? - PullRequest
3 голосов
/ 23 декабря 2009

При реализации шаблона стратегии, как определить, какой класс отвечает для:

  1. Выбор конкретной реализации конкретной стратегии для передачи в класс Context (при условии, что выбор основан на некоторой сложной бизнес-логике, а не на статическом флаге)

  2. Реализация вышеупомянутой конкретной реализации и фактическое внедрение ее в класс Context

Такое ощущение, что должно быть какое-то объективное руководство, которое охватывает это. Я немного читал о различных шаблонах ООП (например, GRASP и SOLID ), но у меня все еще нет ясности в этом конкретном вопросе.

Ответы [ 3 ]

1 голос
/ 23 декабря 2009

Если вы пытаетесь разрешить конкретную ситуацию, вы ищете абстрактный шаблон фабрики . Фабрика определяет, как создать экземпляр семейства типов на основе информации времени выполнения.

Если вам интересно, как разрешить эту ситуацию в абстрактном виде, вы ищете контейнер Inversion of Control , который управляет организацией и выполнением зависимостей. Регистрация стратегии будет включать условную логику.

1 голос
/ 23 декабря 2009

Это очень близко к проблемам, которые у меня были с контейнером DI. Взгляните здесь , Марк Симанн дал отличный ответ.

0 голосов
/ 23 декабря 2009

Это определение зависит от контекста, как и все остальное в шаблонах Desing. Цитата из книги GoF (курсив мой):

Что такое шаблон проектирования?

Кристофер Александр говорит: «Каждый шаблон описывает проблему, которая возникает снова и снова в нашей среде, а затем описывает ядро ​​решения этой проблемы таким образом, что вы можете использовать это решение миллион раз, , никогда не делая это одинаково дважды"[AIS + 77, стр. X]. Хотя Александр говорил о шаблонах в зданиях и городах, то, что он говорит, верно об объектно-ориентированных шаблонах проектирования. Наши решения выражаются в виде объектов и интерфейсов, а не стен и дверей, но в основе обоих типов шаблонов лежит решение проблемы в контексте .

...

Решение описывает элементы, которые составляют дизайн, их отношения, обязанности и сотрудничество. Решение не описывает конкретный конкретный проект или реализацию , потому что шаблон подобен шаблону, который можно применять во многих различных ситуациях. Вместо этого шаблон предоставляет абстрактное описание проблемы проектирования и того, как ее решает общее расположение элементов (в нашем случае классов и объектов).

...