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

装饰者模式学习

时间:2015-01-29 12:27:22      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

定义:

在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
 
 
如一个典型的应用场景,机房服务器发生故障后,给用户发邮件提醒,再又要加上短信提醒,提醒完成后再生成故障报表。
 
适用:
 
动态给类添加功能,还可以撤销。
 
注意:
 
注意装饰先后顺序,如一个典型的应用场景,机房服务器发生故障后,给用户发邮件提醒,再又要加上短信提醒,提醒完成后再生成故障报表。若是不满足发邮件的条件,就不用发短信和生成报表。最后执行的功能总是被最先装饰。
 
 
装饰模式结构:
技术分享
核心在Decorator类上,
 
       protected Component component;
       public void SetDecorator(Component component)
       {
           this.component = component;
       }
       public override void Notice()
       {
           if (this.component!=null)
           {
               this.component.Notice();
           }
       }

也可以把装饰逻辑放到具体的装饰类上:

 protected Component component;
       public void SetDecorator(Component component)
       {
           this.component = component;
       }
把这一段放到具体的装饰者类中。

ConcreteComponent让Decorator对象为自己添加功能。有时候使用ConcreteComponent的派生类提供核心功能,在这种情况就是用ConcreteComponent替代了Component的功能,而且装饰者是继承于ConcreteComponent的子类。

  Component定义ConcreteComponent和Decorator类要实现的方法,简单来说如果一个类继承于该类就具有装饰或被装饰能力。 

  Decorator具有特定装饰功能的类,用来装饰ConcreteComponent类。

 

关于装饰者模式,推荐阅读:http://www.cnblogs.com/rush/archive/2011/05/08/Decorator_DesignPattern_NETFramework.html

 学习设计模式的最大体会就是如果能灵活运用到实际开发中去,说明就掌握了,所以一定要鄞练习,多思考。

demo下载.

 

 

装饰者模式学习

标签:

原文地址:http://www.cnblogs.com/langhua/p/4259117.html

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