首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装饰器模式

装饰器模式
EN

Stack Overflow用户
提问于 2013-11-02 20:18:37
回答 1查看 244关注 0票数 0

我有一个装饰器模式的实现,现在我想写一个方法"Add Decoration",哪个是拥有这个方法ICar或Car的最好的类/接口?以及如何将基本的汽车指向新的装饰汽车?

示例用法:

代码语言:javascript
复制
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;
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2013-11-02 20:30:13

代码语言:javascript
复制
    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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19741817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档