我有两个类(比方说:CAR和VAN),如图所示相关,我需要
自由组合两个装饰者类.. 但我有一个适用于其中一个的装饰器 因为这些装饰器添加了特定的功能,但这个功能基本上是
对应的班级也是如此..我可以将它们命名为相同吗?
按照相同的图表 我试图从CAR继承VAN。那样他们都有相同的装饰......但正如我所说的
VAN不能有液化气体“
所以我的问题仍然存在.. 我能说他们两个装饰师一样吗?
提前多多感谢
gmocamilo
http://www.depositodeimagenes.com/images/h2bpM.jpg
概率pd。对不起,但系统不允许我上传数据
答案 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中,但如果您希望将来拥有一个三轮汽车,那么您必须使用所有这些来改变基类。上述方法允许您保持基类保持不变。