装饰模式
引例:我们拍了一种照片,当场不会想如何装饰它,但是当照片冲洗出来后,我们会想给它加一个玻璃相框中。但是后来又想将它放进一个木头相框中。虽然相框换了,但是照片没变,因为只是往照片添加了东西,而并没有改变它。
在面向对象的软件中,向对象添加“东西”(行为),而不破坏其原有的内容,这样就得到一个加强版的对象(带相框的照片)。任何“东西”(相框)均可动态添加和删除。这就是“装饰”模式
(1)定义 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式主要是为已有功能动态地添加更多功能的一种方式。当系统需要新功能时,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。
(2)类图
(3)何时使用
*想在不影响其他对象的情况下,以透明、动态的方式给单个对象添加职责
*类定义被隐藏,无法进行子类化时使用
说明
1. cocoa框架本身实现了装饰模式(category的方式实现了装饰模式)