C# 装饰器模式
我已经实现了一个装饰器模式,现在我想写一个方法“添加装饰”,哪一个是拥有这个方法的最好类/接口ICar还是Car?如何将基本车与新的装饰车联系起来 样本使用:C# 装饰器模式,c#,design-patterns,C#,Design Patterns,我已经实现了一个装饰器模式,现在我想写一个方法“添加装饰”,哪一个是拥有这个方法的最好类/接口ICar还是Car?如何将基本车与新的装饰车联系起来 样本使用: ICar car=new Car(); ICar radial= new Radial(); car.AddDecoration(radial); interface ICar { int Speed { get; set; } void Accelerate(); } class Car : ICa
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;
}
}
它必须在接口中定义,随后还要在具体类中定义。那么我还需要在抽象装饰类中实现它吗?第二部分呢?这不是实现装饰器模式的典型方式。decorator应该在构造函数中使用修饰对象,并且decorator和decorator都实现相同的接口/抽象类。请为此编写一个小代码段,它必须在接口中定义,然后在具体类中定义。那么我是否也需要在抽象修饰类中实现它?第二部分呢?这不是实现装饰器模式的典型方式。decorator应该在构造函数中使用修饰对象,并且decorator和decorator都实现相同的接口/抽象类。请为此编写一个小代码段,它必须在接口中定义,然后在具体类中定义。那么我是否也需要在抽象修饰类中实现它?第二部分呢?这不是实现装饰器模式的典型方式。decorator应该在构造函数中使用修饰对象,并且decorator和decorator都实现相同的接口/抽象类。请为此编写一个小代码段,它必须在接口中定义,然后在具体类中定义。那么我是否也需要在抽象修饰类中实现它?第二部分呢?这不是实现装饰器模式的典型方式。decorator应该在构造函数中使用修饰对象,并且decorator和decorated都实现相同的接口/抽象类。请为此编写一个小代码段,我想要相反的,ICar car=new car();ICar径向=新径向();汽车装饰(径向);那么也许你不想要装饰图案?我想要相反的图案,ICar car=新车();ICar径向=新径向();汽车装饰(径向);那么也许你不想要装饰图案?我想要相反的图案,ICar car=新车();ICar径向=新径向();汽车装饰(径向);那么也许你不想要装饰图案?我想要相反的图案,ICar car=新车();ICar径向=新径向();汽车装饰(径向);那也许你不想要装饰图案?
interface ICar
{
int Speed { get; set; }
void Accelerate();
}
class Car : ICar
{
public int Speed { get; set; }
public virtual void Accelerate()
{
Speed += 5;
}
}
class Radial : ICar
{
private readonly ICar modified;
Radial(ICar modified)
{
this.modified = modified;
}
public int Speed
{
get { return modified.Speed;
set { modified.Speed = value; }
}
public void Accelerate()
{
modified.Accelerate();
modified.Speed += 1;
}
}
ICar car = new Radial(new Car());
car.Accelerate();