• 装饰者模式学习


    定义:

    在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
     
     
    如一个典型的应用场景,机房服务器发生故障后,给用户发邮件提醒,再又要加上短信提醒,提醒完成后再生成故障报表。
     
    适用:
     
    动态给类添加功能,还可以撤销。
     
    注意:
     
    注意装饰先后顺序,如一个典型的应用场景,机房服务器发生故障后,给用户发邮件提醒,再又要加上短信提醒,提醒完成后再生成故障报表。若是不满足发邮件的条件,就不用发短信和生成报表。最后执行的功能总是被最先装饰。
     
     
    装饰模式结构:
    核心在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下载.

     

     
  • 相关阅读:
    BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
    BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】
    SPOJ104 Highways 【矩阵树定理】
    BZOJ1597土地购买 【斜率优化DP】
    【模板】NTT
    【模板】FFT
    BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】
    POJ3696 The Windy's 【网络流】
    POJ2728 Desert King 【最优比率生成树】
    BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
  • 原文地址:https://www.cnblogs.com/langhua/p/4259117.html
Copyright © 2020-2023  润新知