zoukankan      html  css  js  c++  java
  • 装饰者模式学习

    定义:

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

     

     
  • 相关阅读:
    函数
    python操作文件
    POJ-2689-Prime Distance(素数区间筛法)
    POJ-2891-Strange Way to Express Integers(线性同余方程组)
    POJ-2142-The Balance
    POJ-1061-青蛙的约会(扩展欧几里得)
    Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing
    Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer
    Educational Codeforces Round 75 (Rated for Div. 2) B. Binary Palindromes
    Educational Codeforces Round 75 (Rated for Div. 2) A. Broken Keyboard
  • 原文地址:https://www.cnblogs.com/langhua/p/4259117.html
Copyright © 2011-2022 走看看