Re[5]: Паттерны. Тестовые задачки.
От: Аноним  
Дата: 22.09.04 08:53
Оценка:
Здравствуйте, S.Yu.Gubanov, Вы писали:

SYG>Тупой ответ может быть таким:

SYG>1) Вниз по уровням агрегации:
SYG>
SYG>Node.View.Location.SetPosition(X, Y);
SYG>

SYG>2) Вверх по уровням агрегации:
SYG>
SYG>node := SELF.Domain.Document.Environment.Factory.NewNode();
SYG>

SYG>Но такое решение жестко фиксирует всю архитектуру приложения. Мы не можем разобрать такую пирамиду агрегации ни сверху, ни, тем более, снизу. Мы не можем вставить дополнительные слои и не можем вынуть существующие слои агрегации.

В книге рекомендут использовать паттерн Command.

К примеру

SYG>Было:

SYG>
SYG>Node.View.Location.SetPosition(X, Y);
SYG>

SYG>Хотим вставить между View и Location дополнительный слой агрегации Graphic2D, тогда все строчки кода подобные вышеприведенной придется переписать на новые:
SYG>
SYG>Node.View.Graphic2D.Location.SetPosition(X, Y);
SYG>

Здесь все зависит от конкретной задачи. Мне не очень понятно, что именно нужно. В примере Lexi для добавления ф-ти использовали Decore и Bridge.

SYG>Вопрос в том как реализовать агрегацию (composite) так чтобы потом ее можно было по всякому разбирать и собирать добавляя или удаляя уровни агрегации не переписывая при этом код.

Так весь смысл Composite, что-бы в коде писать Composite.Draw() или другой метод. А сама реализация уже в классе. Добавления еще одного объекта или дополнительной агрегации кода приложения не меняет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.