Большинство шаблонов выглядят очень похожими в коде (или даже в uml), но шаблоны в основном связаны с контекстом, ответственными за конкретную проблему, которую они намерены решить, а не за конкретный исходный код. оба разделяют разные вещи и по разным причинам.
Шаблон цепочки отделяет ответственность за отправку запроса от обработки запроса. может быть несколько классов, которые могут обрабатывать один и тот же тип запроса (эти классы обычно реализуют один и тот же интерфейс), но шаблон позволяет передавать запрос от одного класса (в цепочке) к другому до тех пор, пока обработчик не будет большинство подходящих для обработки запроса получает его и отвечает за обработку запроса (или до тех пор, пока нулевой обработчик не получит его и не укажет конец цепочки). Если вы разрешите неправильному обработчику обработать запрос, результат может «НИКОГДА» не быть правильным
Стратегия касается метода обработки или выбора алгоритма. Возьмем пример случая, когда вы хотите рассчитать среднее значение для некоторых выборок. Любой алгоритм может «ВСЕГДА» быть корректным в данном контексте (например, все классы, имеющие стратегию, делают одно и то же: вычисляет среднее значение), но способ вычисления среднего значения или стратегия расчета среднего значения отличаются от одного класса к другому. и шаблон стратегии позволяет вам выбрать, какую стратегию использовать в развязанном виде.
Теперь сравните это с шаблоном цепочки, где может быть запрос на вычисление среднего, в котором есть один обработчик, который отвечает за вычисление среднего, и может быть другой запрос для вычисления стандартного отклонения, в котором есть другой обработчик, который отвечает за вычисление стандартного отклонения. таким образом, запрос на вычисление среднего значения не будет обрабатываться никаким другим обработчиком, кроме самого подходящего. где любой класс в стратегии может вычислять среднее значение, а если вам не нравится, как один класс вычисляет среднее значение, вы можете «поменять» одну стратегию на другую.
способы реализации их в исходном коде могут отличаться от программиста к программисту, но должны PTSUT (пройти тот же модульный тест ")
Изменить:
Может случиться, что некоторые члены цепочки ответственности могут использовать шаблон стратегии для выполнения своей работы