【发布时间】:2013-11-02 12:18:37
【问题描述】:
我有一个装饰器模式的实现,现在我想写一个方法“添加装饰”,拥有这个方法 ICar 或 Car 的最佳类/接口是哪个?以及如何将基本车指向新装饰车?
使用示例:
ICar car=new Car();
ICar radial= new Radial();
car.AddDecoration(radial);
interface ICar
{
int Speed { get; set; }
void Accelerate();
}
class Car : ICar
{
private int speed = 0;
public int Speed
{
get
{
return speed;
}
set
{
speed = value;
}
}
public virtual void Accelerate()
{
Speed += 5;
}
}
abstract class CarModification : ICar
{
private ICar modifiedCar;
public ICar ModifiedCar
{
get { return modifiedCar; }
set { modifiedCar = value; }
}
public virtual int Speed
{
get
{
return modifiedCar.Speed;
}
set
{
modifiedCar.Speed = value;
}
}
public void Accelerate()
{
modifiedCar.Accelerate();
}
}
class Radial : CarModification
{
public void Accelerate()
{
base.Accelerate();
Speed += 1;
}
}
【问题讨论】:
-
它必须在接口中定义,随后在具体类中也是如此。
-
那我还需要在抽象装饰类中实现它吗?第二部分呢?
-
这不是实现装饰器模式的典型方式。装饰器应该在构造函数中使用装饰对象,并且装饰器和装饰器都实现相同的接口/抽象类。
-
能否请你为此写一个小代码sn-p
标签: c# design-patterns