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的执行方法添加新内容)
         */
  • 相关阅读:
    python --github 刷题
    http://www.rehack.cn/techshare/webbe/php/3391.html
    SQL 百万级数据提高查询速度的方法
    开学收好这 17 种工具 App,让你新学期学习更有效率
    Git文件常见下标符号说明
    TortoiseGit功能介绍
    gitlab图形化使用教程 (mtm推荐)
    gitlab 服务器的搭建与使用全过程(一)
    Git详解之一 Git实战
    Git使用基础篇
  • 原文地址:https://www.cnblogs.com/shushengyou/p/10234069.html
Copyright © 2011-2022 走看看