装饰者模式要点:
声明一个基类(抽象类型),定义基本的动作方法。声明一个起点类继承实现这个基类,然后定义N个装饰者类也继承并实现这个基类。无论是起点类还是装饰者类,他们的共同特点是:继承基类性类别,并传入基类型参数,并针对实体参数做进一步操作,当然也可以忽略传入的参数,做覆盖处理。
实例:
public abstract class Fruit { public abstract double cost(); } public class BuyFruit: Fruit { override public Double cost() { return 0.11;//塑料袋价格 } } /// <summary> /// 苹果 /// </summary> public class Apple : Fruit { private Fruit fruit; public Apple(Fruit x) { this.fruit = x; } override public Double cost() { return fruit.cost()+ 3.6;//苹果价格 } } /// <summary> /// 桔子 /// </summary> public class Orange : Fruit { private Fruit fruit; public Orange(Fruit x) { this.fruit = x; } override public Double cost() { return fruit.cost() + 12.00;//桔子价格 } }
调用代码:
Fruit fruit = new BuyFruit(); fruit = new Apple(fruit); fruit = new Orange(fruit); Console.WriteLine("购买水果总价格:{0}元",fruit.cost());
调用结果:
购买水果总价格:15.71元