Почему составные методы объявлены в интерфейсе компонента? - PullRequest
2 голосов
/ 08 мая 2019

В банде из четырех книг шаблон Composite определяется с помощью диаграммы enter image description here

Почему методы связаны только с Composite частью интерфейса Component?Если бы методы (Add, Remove, Getchild) были частью Composite, а не общим интерфейсом, Composites и Leaves по-прежнему оба реализовывали бы интерфейс Component и, таким образом, использовались бы взаимозаменяемо, как один изЦели составного паттерна.Имея в Leaf и Composite реализацию Component (для этого требуется только Operation сейчас), клиент все равно будет обращаться с ними так же, как

Component anobject = new Leaf();
Component another = new Composite();
another.Operation();
anobject.Operation();

1 Ответ

1 голос
/ 08 мая 2019

Потому что вы рассматриваете композиты и листья одинаково. Вы программируете для интерфейса, а не для конкретных объектов.

В вашем примере вы не могли сделать:

Component l = new Leaf();
Component c = new Composite();

// now you can't do this because Composite doesn't know about add() method, only concrete subclass know in your variation.
composite.add(l); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...