三种设计模式的三种禅语

2017-11-30  本文已影响0人  搬砖的小学生

设计模式以前讲过很多次,但是仔细思考一下,你会发现每一种模式之间存在着微妙差异。今天要讲的是装饰者模式、适配器模式和外观模式的异同。同样是中转站,但是它们分别赋予了三种不同的禅意:责任、变化、做减法。

装饰者模式:责任

装饰者模式动态地将责任附加到目标对象上。它的降临就是要赋予目标对象新的能量。 如图是Java的Input流继承图:

InputStream是输入流,而它的子类FileInputStream是文件输入流。FilterInputStream就是一个装饰者类,通过继承它,可以给文件输入流加上特异功能。比如BufferedInputStream可以使其组装成一个带缓冲区的文件输入流。

“责任“强调的是在原有基础上的附加。

适配器模式:变化

适配器模式将一个类的接口,转换成客户期望的另一个接口。它的意义在于,让不兼容某个接口的类可以完美使用该接口。如图是InputStream和Reader的关系图:

Reader家族是要使用字符输入流的,而InputStream是字节输入流,但我又要用你,所以就用InputSreamReader做一个适配,把你转成字符输入的流。

所以,这种转换就强调的是“变化“,变化之后的你,已经不是原来那个你了。

外观模式:做减法

外观模式提供了统一的接口,用来访问子系统中的一群接口。它让你从繁琐的子系统中解耦出来,一步到位:

外观模式也广泛应用于各种架构设计中。比如下面是我之前讲ServletContext和Tomcat容器时提到的一个关系图,在大的系统架构中,经常需要用一个Façade来提取繁琐的子系统逻辑,使得功能调用方便快捷。

Less is more。外观模式,简单而深奥。


更多内容微信扫描关注本人订阅号:

上一篇下一篇

猜你喜欢

热点阅读