Я заметил, что во всех примерах, иллюстрирующих шаблон декоратора, существует базовый класс / интерфейс и класс декоратора, который наследует / реализует его, после чего все декорированные классы расширяют класс декоратора. Что-то вроде следующего:
Interface Window > WindowDecorator > WindowDecorator > VerticalScrollBarDecorator
вышеприведенная иерархия взята из страницы шаблона проектирования Википедии .
Дело в том, что я хочу украсить некоторые классы "Операция" и иметь что-то в следующей иерархии:
У меня был бы конструктор, принимающий объект Operation в моем классе Operation, например:
public Operation(Operation op)
{
this.op = op;
}
абстрактный метод (назовем его doOperation ), который выполняет операцию (и которую переопределяет каждый подкласс), и другой метод, который вызывает doOperation «хранимого» объекта, например находится в базовом классе):
public void executeOperation(some_args_here)
{
if(op != null)
op.doOperation(); // call stored object's doOperation first
doOperation(); //execute this operation
}
Дело в том, что я действительно не вижу необходимости в классе OperationDecorator, когда я могу делать все, что класс OperationDecorator будет делать прямо в базовом классе. Я неправильно использую шаблон декоратора, если использую его таким образом? Я упускаю некоторые из его функций?