`
dreamstone
  • 浏览: 289077 次
  • 来自: ...
文章分类
社区版块
存档分类

更详细的 Bridge Adapter Facade模式之间的比较

阅读更多
在这篇文章中,我写了Bridge和adapter模式的区别.但是 maninred说
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的关系
呵呵.
六,最后
另外:回应一下maninred
1,我并没有把模式看的很独立,其实很多模式是配合使用的,而且在一定情况下可以
用一个替换另一个.同一个需求,有可能当你思考的角度不同时,使用的模式就不同了.
2,设计模式并不是"用OO的封装来封装所有的东西",模式其实可以应用于所有的设计上
和OO没有直接的关系,只是因为计算机的设计模式大部分是GOF收集总结的,
他们讲解设计模式是用的C++,而在Java中得到了大量应用,所以我们谈到设计模式
的时候多提到OO.其实模式更早应用于建筑学,Alexander的《建筑的永恒之道》讲的
就是设计模式。所以说设计模式应该是设计过程中积累下来的一些成型的东西。
更深入一点,《Java与模式》的作者认为模式起源于中国的道教思想,讲的是哲学。呵呵。
3,对于模式的使用,个人感觉,模式很大程度上是为了对应这类需求的所有情况,也就
是最复杂情况,最灵活情况,当我们实际的开发中并没有遇到这么多这样的情况。
所以在需要的时候使用,根据需求简化使用,而不是照搬。
4,虽然模式是相关的,但是只有知道了每个模式的区别点,才能更好的根据需求选择使用哪个模式。
分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)

    ### C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) #### 一、概述 本篇文章将深入探讨C#面向对象设计模式中的...以上就是关于C#面向对象设计模式中Facade外观模式的详细介绍,希望对大家有所帮助。

    23种Python设计模式示例演示源码包.rar

    23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...

    设计模式Golang实现《研磨设计模式》读书笔记.zip

    设计模式Golang实现《研磨设计模式》读书笔记Go语言设计模式Go语言设计模式...Facade)适配器模式(Adapter)代理模式(Proxy)组合模式(Composite)享元模式(Flyweight)装饰模式(Decorator)桥模式(Bridge)行为...

    java设计模式教程+源代码

    Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) Composite ( 组合模式 ) Decorator ( 装饰模式 ) Facade ( 外观模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 ) Chain of Responsibility ( 责任链模式 ) ...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...

    JAVA设计模式chm文档

    设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式...

    23种java设计模式.pdf

    结构模式是指在对象之间的关系和结构上使用的模式,包括 Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade(外观模式)...

    GoF 23种设计模式的详解与应用

    结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...

    23种java设计模式

    2、结构模式:Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)。3、行为模式:Iterator(迭代模式)、Template(模板...

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    设计模式文档 chm

    设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...

    java 23种设计模式及具体例子

    * 观察者模式:观察者模式是一种行为型模式,它可以将对象之间的关系建立在观察者和被观察者之间,以便于更好地实现对象之间的关系。 * 迭代子模式:迭代子模式是一种行为型模式,它可以将对象之间的关系建立在迭代...

    24种设计模式以及混合设计模式

    其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...

    01-制造工具的工厂模式(1).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    09-通过容器实现的外观模式(2).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    00-初探 Laravel 和其中的设计模式(3).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    12-附录 1 设计模式的七大原则(1).html

    适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite ) 享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ...

    23种面向对象设计模式

    2. **结构型模式**(Structural Patterns):主要关注如何组合类和对象以实现更大的结构,包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、...

Global site tag (gtag.js) - Google Analytics