zoukankan      html  css  js  c++  java
  • 大话设计模式读书笔记--3.装饰模式

    定义

    动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

    继承添加新功能:使用继承是静态的,在编译的时候就已经决定了子类的行为,我们不便于控制增加行为的方式和时机。
    关联添加新功能:B对象引用A对象,由B对象决定是否来扩展A对象的行为

    关联不会破坏类的封装性,可以为类动态添加职责 

    模式结构

    Component: 定义一个对象接口,可以给这些对象动态的添加职责

    ConcreteComponent: 定义一个具体的对象,也可以给这个对象添加职责

    Decorate:装饰抽象类, 从外类扩展Component的功能,但对于Component来说,是无需知道Decorate的存在

    ConcreteDecorateA: 具体的装饰对象,起到给Component添加职责

    模式实现

    场景: 一个人穿衣服, 要求穿鞋子,带帽子

    场景分析:可以先穿鞋子后带帽子, 也可以先带帽子后穿鞋子,顺序是可以变的 

    实现效果 : 在运行时,不用修改给定对象的结构就可以在外部增加附加的功能

    下载代码, 解压后目录下图:

    优缺点

    优点:

    在不改变原有代码的情况下,把类的核心功能和装饰功能区分开了,并能动态扩展一个对象的新功能

    缺点:

    对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。

    使用场景

    当某个对象的职责经常发生变化或者需要动态的增加职责

  • 相关阅读:
    Linux Kernel USB 子系统(1)
    折腾 Gnome3
    2011年06月08日
    xelatex 果然好用
    倍受打击
    长到40岁学到的41件事
    autocompletemode + flyspellmode
    The Linux Staging Tree, what it is and is not.
    如何选择开源许可证?
    Use emacs & Graphviz to plot data structure
  • 原文地址:https://www.cnblogs.com/liuconglin/p/6399702.html
Copyright © 2011-2022 走看看