zoukankan      html  css  js  c++  java
  • 设计模式(九):装饰者模式

    优点:

      ① 可以提供比继承更多的灵活性,原有代码无须变动,只是在原对象上装饰一层“外衣”。

      ② 可以动态扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。

    缺点:

      ① 会产生很多的小对象,增加了系统的复杂性

      ② 比继承更加灵活,同时意味着比继承更易出错,排错也困难,对于多次装饰的对象,可能需要逐级排查。

    适用范围:

      在不影响其他对象的情况下,动态、透明的为特定对象添加新功能,同时也可动态撤销新功能。

      当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。

    客户端:

      ConcreteComponent c = new ConcreteComponent(); //待装饰对象

      Decorator a = new ConcreteDecoratorA(); //装饰1
      Decorator b = new ConcreteDecoratorB(); //装饰2

      a.SetComponent(c); //装饰1加入对象c
      b.SetComponent(a); //装饰2加入对象c(已含装饰1)
      b.Operation(); //全部展示

    一句话概括:在不影响其他对象的情况下,为原有对象添加“新的衣服”。

        /**
         * Component          (待装饰对象接口,含执行方法)
         * ConcreteComponent  (待装饰对象实例化)
         *
         * Decorator          (装饰抽象类,继承了Component接口,且有Component属性)
         * ConcreteDecoratorA   ConcreteDecoratorB (两个装饰实例,为Component的执行方法添加新内容)
         */
  • 相关阅读:
    Java时间日期格式转换
    数据库性能优化
    java 词法分析器
    hdu 1018 Big Number
    hdu 1233 还是畅通工程
    hdu 2583 permutation 动态规划
    Sublime Text 3 安装 Package Control 结果返回 275309,找不到 Install Package
    Sublime Text 常用快捷键(Mac环境)
    sublime设置 reindent 快捷键
    scrollWidth、clientWidth 和 offsetWidth
  • 原文地址:https://www.cnblogs.com/shushengyou/p/10234069.html
Copyright © 2011-2022 走看看