Модель стратегии: объединенная стратегия против разобщенной стратегии

В чем разница между связанной стратегией и несвязанной стратегией?

Спасибо за ответы.

1 ответ

Решение

Стратегия связывается, когда классы стратегии знают контекст, или когда клиент знает конкретные классы стратегии.

мы можем прочитать здесь (с некоторыми незначительными правками):

Обычно каждая стратегия нуждается в данных из контекста или должна возвращать некоторые обработанные данные в контекст. Это может быть достигнуто двумя способами.

  1. создание некоторых дополнительных классов для инкапсуляции определенных данных.
  2. передача самого объекта контекста объектам стратегии. Объект стратегии может установить возвращаемые данные непосредственно в контексте.

Когда данные должны быть переданы, недостатки каждого метода должны быть проанализированы. Например, если некоторые классы создаются для инкапсуляции дополнительных данных, следует обратить особое внимание на то, какие поля включены в классы. Возможно, в текущей реализации все обязательные поля добавлены, но, возможно, в будущем некоторым новым классам конкретной стратегии потребуются данные из контекста, которые не включены в эти дополнительные классы. В этот момент следует указать еще один факт: весьма вероятно, что некоторые из конкретных классов стратегии не будут использовать поля, переданные ему в дополнительных классах.

Если объект контекста передается в стратегию, то мы имеем связь между стратегией и контекстом.

О связи между стратегиями и клиентом на той же странице мы читаем:

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

Независимо от контекста, который определяет стратегию, развязка выполняется путем введения конкретного объекта стратегии клиенту, поэтому клиент не знает, какая это конкретная реализация или какие существуют другие реализации.

Таким образом, несвязанная реализация - это когда никто не знает других конкретных участников.

Другие вопросы по тегам