大话设计模式读书笔记--3.装饰模式

定义

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

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

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

模式结构

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

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

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

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

模式实现

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

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

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

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

 

优缺点

优点:

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

缺点:

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

使用场景

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

posted @ 2017-02-15 13:37  liuconglin  阅读(293)  评论(0编辑  收藏  举报