Bridge , Adapter, Facade 区别

Bridge和adapter是没有关系的,而和Facade比较象,但在我的经验中更多的时候
是会混淆Bridge和adapter而不是Facade,这里详细的列出三个模式的比较 .
一,定义:
1.Facade模式是为一个复杂系统提供一个简单的接口。
比如你要去博物馆参观,很多东西,你一个个到处去问每个东西的管理员很麻烦,所以你找一个导游,让他给你一个个介绍,你只要找到导游就好了。导游就是门面。
2,适配器模式,引用一下GOF95中的话:
适配器模式是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法工作的两个类能够工作到一起。
举个例子,例如变压器
3,Bridge模式:
GOF95中的桥梁模式的描述:桥梁模式的用意是"将抽象化与实现化脱耦,使的二者可以独立变化。
例如AWT的实现
二,目的:
1,Facade模式使用在给一个复杂的系统提供统一的门面(接口),目的是简化客户端的操作,但并没有改变接口.
2,Adapter模式使用在两个部分有不同的接口的情况,目的是改变接口,使两个部分协同工作
3,桥梁模式是为了分离抽象和实现
二,使用场合
1,Facade模式出现较多的情况是这样的情况,你有一个复杂的系统,对应了各种情况,
客户看了说功能不错,但是使用太麻烦.你说没问题,我给你提供一个统一的门面.
所以Facade使用的场合多是对系统的"优化".
2,Adapter模式出现的情况是这样,你有一个类提供接口A,但是你的客户需要一个实现接口B的类,
这个时候你可以写一个Adapter让把A接口变成B接口,所以Adapter使用的场合是
指鹿为马.就是你受夹板气的时候,一边告诉你我只能提供给你A(鹿),一边告诉你说
我只要B(马),他长了四条腿,你没办法了,把鹿牵过去说,这是马,你看他有四条腿.
(当然实现指鹿为马也有两种方法,一个方法是你只露出鹿的四条腿,说你看这是马,这种方式就是
封装方式的Adapter实现,另一种方式是你把鹿牵过去,但是首先介绍给他说这是马,因为他长了四条腿
这种是继承的方式.)
3,Bridge模式在一般的开发中出现的情况并不多,AWT是一个,SWT也算部分是,
如果你的客户要求你开发一个系统,这个系统在Windows下运行界面的样子是Windows的样子.
在Linux下运行是Linux下的样子.在Macintosh下运行要是Mac Os的样子.
怎么办? 定义一系列的控件Button,Text,radio,checkBox等等.供上层开发者
使用,他们使用这些控件的方法,利用这些控件构造一个系统的GUI,然后你为这些控件
写好Linux的实现,让它在Linux上调用Linux本地的对应控件,
在Windows上调用Windows本地的对应控件,在Macintosh上调用Macintosh本地的对应控件
ok,你的任务完成了.
三,需求程度
1,Facade的需求程度是"中等",因为你不提供Facade程序照样能工作,只是不够好.
2,Adapter的需求程度是"必须",因为你不这么做就不能工作,除非你自己从头实现一个.
3,Bridge的需求程度是"一般",适合精益求精的人,因为你可以写三个程序给客户.
四,出现时期
1,Facade出现在项目中期,再优化
2,Adapter出现在项目后期,大部分都有了,差的仅仅是接口不同
3,Bridge出现在项目前期,你想让你的系统更灵活,更cool
五,在写文章的时候想到的
1,Facade很多时候是1:m的关系
2,Adapter很多是候是1:1的关系
3,Bridge很多时候是m:n的关系

上一篇:常用快捷方法 -- html


下一篇:12 外观模式