Почему у клиента нет ссылки на invoker в шаблоне Command?
Почему у клиента нет ссылки на вызывающего, когда он ссылается на получателей и конкретные команды?
public static void main(String[] args)
{
StockTrade stock = new StockTrade();
BuyStockOrder bsc = new BuyStockOrder (stock);
SellStockOrder ssc = new SellStockOrder (stock);
Agent agent = new Agent(); //<-- The invoker is right there yet it is not
// in the diagram?
agent.placeOrder(bsc);
agent.placeOrder(ssc);
}
2 ответа
Статья в вики объясняет это как:
Клиент создает экземпляр объекта команды и предоставляет информацию, необходимую для вызова метода позднее. Вызывающий решает, когда метод должен быть вызван. Получатель является экземпляром класса, который содержит код метода.
Если я правильно понимаю ваш вопрос, ответ таков.
На этой диаграмме есть ссылка, которую можно проследить от Клиента до Invoker. Если вы посмотрите, то увидите пунктирную линию от клиента к ConcreteCommand с именем "instantiate", затем строку от ConcreteCommand к Command, а затем строку от Command к Invoker.
Насколько я понимаю, эта пунктирная линия обозначает создание объектов для последующего использования (как видно из кода - они создаются в основном).