之前对这两个设计模式没有太大的疑惑,但这次的软考让我感觉他俩怎么看怎么都是如出一辙,所以就将这两个仔细的对比对比。首先来看外观:
外观模式,大家在机房收费中大家都使用过,它像一个平台却更像一个容器将所有的方法收集在这里,然后进行统一管理。所以说外观就像是电脑上使用的集线器,将鼠标线、键盘线、散热器线等都收集到一起,通过自身的功能进行整理。像下图显示的:
外观模式的作用就像是红框中的那部分,将原本凌乱无序的多条线进行整理,为所有线中的数据操作提供一个平台,帮助它们实现自己的目标操作。用官方的图来表示就是:
那么再来看适配器模式:适配器使用百度百科的解释来说就是“适配器就是一个转换器”,而将该解释生活化也就是:现在你有一根数据线,需要给手机充电,但由于数据线不能直接和插座相连,你只能苦苦等待,还好有一个东西可以帮你,那就是一个插头,左侧与数据线相连,而另一侧与插座相连,将插座中的电流通过插头和数据线导入到手机中,实现充电的效果。
但需要注意的是,适配器模式有对象适配器和类适配器两种:
(第一幅图为类适配器模式,第二幅为对象适配器模式图)
但在Java中不允许多重继承所以Java版的设计模式只有对象适配器这一种。所以在该模式中,被适配者和适配者不一定是相同的事物,比如我们能不能使用适配器模式用火鸡冒充鸭子,那么应该怎么样的呢?
这样的话,我们就可以使用适配器模式对火鸡的叫声、飞行等动作稍做调整后,“冒充”鸭子。
所以外观中前后是一样的事物,只是外观进行了整理和归纳,而适配器模式是将一个事物“改变”为另一个不相同的事物。详细的总结如下:
所以从某种角度来讲这两种模式是一样的,都让类华丽变身:前者为接口穿了一身简单大方的衣服,而后者则为接口演绎了一次“狸猫换太子”的佳话。
原文地址:http://blog.csdn.net/ysc1123/article/details/41177637