Почему у клиента нет ссылки на 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.

Насколько я понимаю, эта пунктирная линия обозначает создание объектов для последующего использования (как видно из кода - они создаются в основном).

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