Стратегия стратегии: взаимосвязанная стратегия против несвязанной стратегии

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

Спасибо, что ответили.

1 ответ

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

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

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

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

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

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

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

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

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

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

licensed under cc by-sa 3.0 with attribution.