装饰器模式

关于装饰器模式

terrylee大哥的这篇文章已经说的很详细了

  http://terrylee.cnblogs.com/archive/2006/03/01/340592.html

这里只是记录一下我自己对装饰器模式理解,实现的一个实例,方便温故而知新

class 装饰
   {
       static void Main(string[] args)
       {
           ICar tank = new BM();//车的基本功能
           tank = new CarA(tank);//在车的基本功能上装饰上 自动档功能
           tank = new CarB(tank);//在车的基本功能和自动档功能上装饰上 定速巡航功能
           tank.Act();
           Console.ReadLine();
       }
   }

   public interface ICar
   {
       void Act();
   }

   public abstract class Car : ICar
   {
       public virtual void Act()
       {
           Console.WriteLine("基本功能");
       }
   }

   public class BM : Car
   {
       public override void Act()
       {
           base.Act();
           Console.WriteLine("宝马特殊功能");
       }
   }

   public class CarA : ICar//自动档功能装饰器
   {
       ICar car = null;
       public CarA(ICar tank)
       {
           this.car = tank;
       }
       public void Act()
       {
           car.Act();
           Console.WriteLine("装饰自动档功能");
       }
   }


   public class CarB : ICar//装饰定速巡航功能装饰器
   {
       ICar car = null;
       public CarB(ICar tank)
       {
           this.car = tank;
       }
       public void Act()
       {
           car.Act();
           Console.WriteLine("装饰定速巡航功能");

       }
   }
人生无处不PK
原文地址:https://www.cnblogs.com/ivanyb/p/2909272.html