标签:
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
一、基类
public abstract class Component { public abstract void Operation(); } public abstract class Decorator : Component { protected Component component; public void SetComponent(Component component) { this.component = component; } public override void Operation() { if (component != null) { component.Operation(); } } }
二、基础算法
1 public class ConcreteComponent : Component 2 { 3 public override void Operation() 4 { 5 Console.WriteLine("制造一个人"); 6 } 7 }
三、装饰
1 public class ConcreteDecoratorA : Decorator 2 { 3 public string addedState; 4 public override void Operation() 5 { 6 base.Operation(); 7 addedState = "New State"; 8 Console.WriteLine("穿衣服"); 9 } 10 } 11 12 public class ConcreteDecoratorB : Decorator 13 { 14 public override void Operation() 15 { 16 base.Operation(); 17 AddedBehavior(); 18 } 19 20 private void AddedBehavior() 21 { 22 Console.WriteLine("理发"); 23 } 24 }
四、执行
1 /// <summary> 2 /// 装饰模式 3 /// </summary> 4 public class DoDecorator : DesignPattern 5 { 6 public override void ExeFun() 7 { 8 ConcreteComponent c = new ConcreteComponent(); 9 ConcreteDecoratorA da = new ConcreteDecoratorA(); 10 ConcreteDecoratorB db = new ConcreteDecoratorB(); 11 da.SetComponent(c); 12 db.SetComponent(da); 13 db.Operation(); 14 } 15 }
标签:
原文地址:http://www.cnblogs.com/pasture-code/p/4561219.html