大话设计模式
上QQ阅读APP看书,第一时间看更新

6.6 装饰模式总结

“来来来,总结一下,你感觉装饰模式如何?”

“我觉得装饰模式是为已有功能动态地添加更多功能的一种方式。但到底什么时候用它呢?”

“答得很好,问的问题更加好。你起初的设计中,当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为,比如用西装或嘻哈服来装饰小菜,但这种做法的问题在于,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,就像你起初的那个‘人’类,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。而装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了[DP]。所以就出现了上面那个例子的情况,我可以通过装饰,让你全副武装到牙齿,也可以让你只挂一丝到内裤。”

“那么装饰模式的优点我总结下来就是,把类中的装饰功能从类中搬移去除,这样可以简化原有的类。

“是的,这样做更大的好处就是有效地把类的核心职责和装饰功能区分开了。而且可以去除相关类中重复的装饰逻辑。”

“这个模式真不错,我以后要记着常使用它。”

“你可要当心哦,装饰模式的装饰顺序很重要哦,比如加密数据和过滤词汇都可以是数据持久化前的装饰功能,但若先加密了数据再用过滤功能就会出问题了,最理想的情况,是保证装饰类之间彼此独立,这样它们就可以以任意的顺序进行组合了。”

“是呀,穿上西装再套上T恤实在不是什么好穿法。”

“明天想好了要穿什么去见MM了吗?”大鸟突然问道。

“有了装饰模式,我还用得着担心我的穿着。再说,我信奉的是《天下无贼》中刘德华说的一句经典台词:‘开好车就是好人吗?’,小菜我魅力无限,不需装饰。”

大鸟惊奇地望着小菜,无法理解地说了句:“学完模式,判若两人,你够弓虽!”