装饰模式
1、我的个人理解,会根据不同时期有不同的理解
理解一:装饰模式给我的理解就是对一个对象进行层层包装,而每一次包装都是在上一层的基础上进行,而不是从然来没有进行任何包装的对像开始的
2、定义:动态的给一个对象添加一些额外的职责,就是增加功能来说,装饰模式比生成子类更为灵活。
3、以对人类进行装饰为例,具体代码如下:
1)创建人类
1 //人类 2 class person 3 { 4 public person() { } 5 private string name; 6 public person(string name) 7 { 8 this.name = name; 9 } 10 public virtual void Show() 11 { 12 Console.WriteLine("装扮的{0}",name); 13 } 14 }
2)用于装饰人类的类,他要去继承人类
1 class Finery : person 2 { 3 //将人类做为属性 4 protected person component; 5 //打扮 6 public void Decorate(person component) { 7 this.component = component; 8 } 9 //重写show方法 10 public override void Show() 11 { 12 if (component != null) { 13 component.Show(); 14 } 15 } 16 }
3)具体的装饰类,如裤子衣服等
1 //大T恤去继承这个类 2 class TShirts : Finery 3 { 4 //重写show方法的同时在里面对基类的show方法进行调用 5 public override void Show() 6 { 7 Console.WriteLine("T恤"); 8 base.Show(); 9 } 10 } 11 class BigTrouser : Finery 12 { 13 public override void Show() 14 { 15 Console.WriteLine("裤子"); 16 base.Show(); 17 } 18 }
4)客户端代码
1 //装饰模式:模拟人穿衣服 2 static void Main(string[] args) 3 { 4 //创建一个具体的人 5 person zhengwei = new person("郑为"); 6 //创建具体要装饰的服装 7 TShirts ts = new TShirts(); 8 BigTrouser bt = new BigTrouser(); 9 10 //进行装饰,先穿T恤,再穿裤子 11 ts.Decorate(zhengwei); 12 bt.Decorate(ts); 13 14 //展示装扮 15 bt.Show(); 16 Console.ReadLine(); 17 }