Реализация делегатов в Java - PullRequest
0 голосов
/ 03 апреля 2011

Я понимаю, что делегат используется для разделения клиентского и бизнес-уровня. Клиент вызывает бизнес-сервис через объект делегата. Мой вопрос заключается в том, что хорошо, чтобы интерфейс делегата был открыт клиенту (Дизайн по контрактному принципу ИЛИ DIP), а не фактический объект делегата. Или это просто нормально иметь объект делегата, к которому клиент обращается напрямую.

Ответы [ 3 ]

1 голос
/ 04 апреля 2011

Я полагаю, что вы, возможно, путаете внешний API (фасад), который использует клиент, и код, который фактически вызывается через делегат:

public class Worker implements IWorker {
    private IProcessor delegate;

    void doWork(PublicDO data) {
      PrivateDO pdo = convert(data);
      delegate.doProcess(pdo);
    }
...
}

Делегат без необходимости имеет тот же интерфейс, что и фасад. Кроме того, интерфейс делегата может быть изменен, в то время как открытый интерфейс остается неизменным. Может быть несколько реализаций делегатов, которые немного различаются, создаются во время выполнения на основе некоторых параметров.

Таким образом, всегда полезно разделять открытый интерфейс и интерфейс делегирования.

Делегат, имеющий тот же интерфейс, что и общедоступный фасад, - просто простейший случай.

1 голос
/ 03 апреля 2011

Я бы выбрал интерфейс, потому что это позволило бы мне отделить то, что сделано, от того, как. Я мог бы счесть выгодным сделать делегата прокси или украсить его аспектом; оба легко с интерфейсом.

0 голосов
/ 03 апреля 2011

Вы можете увидеть википедию:

http://en.wikipedia.org/wiki/Delegation_pattern

есть фрагмент в Java

прощай

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...