定义:
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
Component : 是定义一个对象接口口,可以给这些对象动态地添加职责。 ConcreteComponent 定义了一个具体的对象,也可以给这个对象添加一休二职责。 Decorator,装饰抽象类,继承了Component, 从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator的存在。至于concreteDecorator 就是具体的装饰对象,起到给Component添加职责的功能。
每个装饰对象的实现和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中的。
装饰模式总结:
1》 装饰模式是为已有功能动态添加更多功能的一种方式。
使用装饰模式的情况:
1》想要在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
当系统需要新功能的时候,是向旧的类中添加新的代码,这些新家的代码通常装饰了原有类的核心职责或主要行为。
2》想扩展一个类的行为,增加了主类的复杂度或者做不到。
类定义可能被隐藏、无法进行子类化;或者对类的每个行为的扩展,为支持每种功能组合,将产生大量的子类。
3》 对类的职责的扩展是可选地的。
新加入的东西仅仅是为了满足一些只有在某种特定情况下才会执行的特殊行为的需要。 而装饰模式提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因为当需要执行特殊行为的时候,客户代码可以在云心时候根据需要有选择的、按照顺序的装饰功能包装对象。
优点:
1》把类中的装饰功能从类中搬移去除,这样可以简化原有的类
2》有效的吧类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。
3》 不破坏原来的核心逻辑。
iOS上的装饰: 可以通过类的方式,也可以通过范畴的方式。
eg: 常见例子
1》图片滤镜处理
2》。。。。
网友评论