Шаблон команды состоит из трех основных компонентов: вызывающий, команда и получатель. Клиент предоставляет Invoker информацию, необходимую для вызова определенного метода M
в Receiver, в то время как это объект Command (который находится в Receiver ), который на самом деле вызывает M
.
a) Чтобы реализовать CP, мы должны отделить логику Invoker от количества команд таким образом, чтобы по мере увеличения количества команд Invoker класс не должен меняться. Мы делаем это, когда объекты Command и Invoker зависят от абстракции (например, интерфейса).
Таким образом, не является ли CP просто конкретной реализацией DIP?
б) Если CP действительно является реализацией DIP, то что именно отличает CP от других типов DIP? выполнение? А именно, разве мы не можем утверждать, что все другие реализации DIP также имеют объект Invoker (т.е. модуль более высокого уровня), объекты Command (т.е. зависимости которые предоставляют модуль более высокого уровня с поведением), в то время как Receiver будет считаться любым методом, который вызывает объект зависимости (т.е. модуль более низкого уровня)?
Спасибо
ИЗМЕНИТЬ:
a)
Зависимый объект сохраняет зависимость как поле и использует ее для всех последующих вызовов метода.
И если зависимый объект не хранит эту зависимость как поле, поэтому он не использует ее для всех последующих вызовов, а вместо этого всегда получает новый объект зависимости, можем ли мы тогда утверждать, что у нас есть CP< /strong> а не DI?
И наоборот — если Invoker всегда вызывает один и тот же объект команды, можем ли мы тогда утверждать, что у нас есть DI, а не CP, независимо от того, какой рабочий объект команды фактически выполняет?
б) Я понимаю, что вы пытаетесь донести, но у меня все еще есть серьезные проблемы с различением того, что делает что-то поведением, а что командой. С моей точки зрения, передача команды Invoker также может быть интерпретирована как введение поведения, необходимого зависимому объекту для выполнения своей работы. Это действительно так однозначно или это более субъективно? Таким образом, как мы решаем, является ли работа, выполняемая объектом, командой или поведением?