码迷,mamicode.com
首页 > 其他好文 > 详细

装饰模式

时间:2015-06-08 17:13:18      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

一、基类

    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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!