具有相同名称的装饰器

时间:2011-10-27 03:36:22

标签: design-patterns decorator uml

好吧,我会直接的, 它是关于装饰模式的 你会看到,我用这个图表来举例说明情况

我有两个类(比方说:CAR和VAN),如图所示相关,我需要

自由组合两个装饰者类.. 但我有一个适用于其中一个的装饰器 因为这些装饰器添加了特定的功能,但这个功能基本上是

对应的班级也是如此..

我可以将它们命名为相同吗?

按照相同的图表 我试图从CAR继承VAN。那样他们都有相同的装饰......但正如我所说的

VAN不能有液化气体“

所以我的问题仍然存在.. 我能说他们两个装饰师一样吗?

提前多多感谢

gmocamilo

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

概率pd。对不起,但系统不允许我上传数据

2 个答案:

答案 0 :(得分:1)

让两个类做同样的事情并且具有相同的名称通常是一种不好的做法,就像所有代码重复一样。 FourWheelDrive装饰器应直接从Vehicle下降并接受Vehicle作为decoratee。 LiquidGas装饰器可以从SimpleCar下载并接受SimpleCar作为decoratee,如果你想将它的使用限制为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)));

答案 1 :(得分:0)

我认为你应该创建一个类Car,然后你创建一个CarDecorator类。从CarDecorator继承包含所需属性的类。

这样当您创建汽车时,您可以使用CarDecorator中的类向汽车添加各种“部件”,并且由于您继承自CarDecorator,您可以通过使用一个以CarDecorator作为参数的构造函数来级联属性:

E.g。

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

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

当然,您可以从一开始就将FourWheelDrive放入基类Car中,但如果您希望将来拥有一个三轮汽车,那么您必须使用所有这些来改变基类。上述方法允许您保持基类保持不变。