设计模式以前讲过很多次,但是仔细思考一下,你会发现每一种模式之间存在着微妙差异。今天要讲的是装饰者模式、适配器模式和外观模式的异同。同样是中转站,但是它们分别赋予了三种不同的禅意:责任、变化、做减法。
装饰者模式:责任
装饰者模式动态地将责任附加到目标对象上。它的降临就是要赋予目标对象新的能量。 如图是Java的Input流继承图:
InputStream是输入流,而它的子类FileInputStream是文件输入流。FilterInputStream就是一个装饰者类,通过继承它,可以给文件输入流加上特异功能。比如BufferedInputStream可以使其组装成一个带缓冲区的文件输入流。
“责任“强调的是在原有基础上的附加。
适配器模式:变化
适配器模式将一个类的接口,转换成客户期望的另一个接口。它的意义在于,让不兼容某个接口的类可以完美使用该接口。如图是InputStream和Reader的关系图:
Reader家族是要使用字符输入流的,而InputStream是字节输入流,但我又要用你,所以就用InputSreamReader做一个适配,把你转成字符输入的流。
所以,这种转换就强调的是“变化“,变化之后的你,已经不是原来那个你了。
外观模式:做减法
外观模式提供了统一的接口,用来访问子系统中的一群接口。它让你从繁琐的子系统中解耦出来,一步到位:
外观模式也广泛应用于各种架构设计中。比如下面是我之前讲ServletContext和Tomcat容器时提到的一个关系图,在大的系统架构中,经常需要用一个Façade来提取繁琐的子系统逻辑,使得功能调用方便快捷。
Less is more。外观模式,简单而深奥。
更多内容微信扫描关注本人订阅号:
网友评论