装饰模式定义:
动态第给一个对象添加一些额外的职责。就扩展功能来说,装饰模式相比生成子类更为灵活。
何时使用装饰模式:
在以下3中常见的情形下,应该考虑使用这一模式。
想要在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
想要扩展一个类的行为,却做不到。类定义可能被隐藏,无法进行子类化;或者,对类的每个行为的扩展,为支持每种功能组合,将产生大量的子类。
对类的职责的扩展是可选的。
装饰者模式是向对象添加新的行为与职责的一种方式,它不改变任何现有行为与接口。
装饰模式总结:
我觉得装饰模式,是为已有功能动态的添加更多功能的一种方法。但是到底什么时候用它呢?
在本文的最初设计中,当系统需要添加新功能的时候,是
向旧的类中添加新的代码,这些新增的代码通常装饰了原有类的核心职能或主要行为。
这种设计方式问题在于,
他们在主类中增加了新的字段、新的方法、新的逻辑,从而增加了主类的负责度。而这些新加入的东西仅仅是为了满足一些在某种特定情况下才会执行的特殊行为的需求。
而装饰模式提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包含它所要装饰的对象,因此,当执行特殊行为时,在viewController里就可以根据需求有选择、按顺序的使用装饰功能包装对象了。
所以就有了上面的代码,我可以通过装饰,让person武装到牙齿,也可以只让他穿条内裤。
装饰模式的优点:
把类中的装饰功能从类中搬移出去,这样可以简化原有的类。
当有效的把类中的核心功能和装饰功能区分开了,可以去除相关类中重复的装饰逻辑。
还可以参考如下文章:
http://www.tuicool.com/articles/jyeU3mu
http://www.cnblogs.com/ziyi--caolu/p/4810339.html