Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 装饰器模式_C#_Design Patterns - Fatal编程技术网

C# 装饰器模式

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?如何将基本车与新的装饰车联系起来

样本使用:

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();