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