декораторы с тем же именем - PullRequest
0 голосов
/ 27 октября 2011

ну, я собираюсь быть прямым, речь идет о шаблоне декоратора вы увидите, я сделал этот график, чтобы проиллюстрировать ситуацию

У меня есть два класса (скажем, CAR и VAN), которые связаны, как говорит график, и мне нужно

для свободного объединения двух классов декораторов. но у меня есть один декоратор, который применим только для одного из них так как эти декораторы добавляют определенную функциональность, но эта функциональность по существу является

то же самое для класса-корреспондента.

могу я назвать их так же?

по тому же графику я пытался унаследовать VAN от CAR. таким образом, они оба имеют одинаковые декораторы ... но, как я сказал

VAN не может иметь сжиженный газ "

так что мой вопрос остается .. Могу ли я назвать оба декоратора одинаковыми?

Большое спасибо заранее

gmocamilo

http://www.depositodeimagenes.com/images/h2bpM.jpg

оплаченный извините, но система не позволяет загружать цифры

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Два класса делают одно и то же и имеют одно и то же имя, как правило, плохая практика, как и любое дублирование кода. Декоратор FourWheelDrive должен быть непосредственно спущен с Транспортного средства и принимать Транспортное средство в качестве украшающего. Декоратор LiquidGas может выйти из SimpleCar и принять SimpleCar в качестве декоратора, если вы хотите ограничить его использование SimpleCar:

class LiquidGasDecorator extends Vehicle
{
   private SimpleCar simplecar_;
   public LiquidGasDecorator(SimpleCar simplecar)
   {
     simplecar_ = simplecar;
   }
}

Vehicle fourwheelvan = new FourWheelDriveDecorator(new Van());
Vehicle fourwheelcarwithlpg = new LiquidGasDecorator(new FourWheelDriveDecorator(new SimpleCar)));
0 голосов
/ 27 октября 2011

Я думаю, вы должны создать класс Car, а затем создать класс CarDecorator.От CarDecorator вы наследуете с классами, которые содержат нужные вам атрибуты.

Таким образом, когда вы создаете автомобиль, вы используете классы из CarDecorator для добавления различных «частей» к вашему автомобилю, и, поскольку вы наследуете от CarDecorator, выможно каскадировать атрибуты, имея один конструктор, который принимает CarDecorator в качестве аргумента:

Например,

Car* van = new Car( new FourWheelDrive() );

и

Car* car = new Car( new FourWheelDrive( new LiquidGas() ) );

Конечно, вы можете поместить FourWheelDrive в базовый классАвтомобиль с самого начала, но если вы захотите в будущем иметь трехколесную машину, вам придется сменить базовый класс на все, что это значит.Вышеуказанный подход позволяет вам не трогать базовый класс.

...