首页 > 代码库 > 装饰模式

装饰模式

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         }

 

装饰模式