`
edr_
  • 浏览: 169792 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

设计模式-桥接模式与策略模式之间的区别

阅读更多
以下内容摘自博客:从桥接模式与策略模式谈起
讨论帖:关于桥接与策略的区别

桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。以下是它们的UML结构图。
在桥接模式中,Abstraction通过聚合的方式引用Implementor。

在策略模式中,Context也使用聚合的方式引用Startegy抽象接口。


举一个例子:
策略模式:我要画圆,要实心圆,我可以用solidPen来配置,画虚线圆可以用dashedPen来配置。这是strategy模式。
桥接模式:同样是画圆,我是在windows下来画实心圆,就用windowPen+solidPen来配置,在unix下画实心圆就用unixPen+solidPen来配置。如果要再windows下画虚线圆,就用windowsPen+dashedPen来配置,要在unix下画虚线圆,就用unixPen+dashedPen来配置。
画圆方法中,策略只是考虑算法的替换,而桥接考虑的则是不同平台下需要调用不同的工具,接口只是定义一个方法,而具体实现则由具体实现类完成。

区别:

桥接模式:不仅Implementor具有变化(ConcreteImplementor),而且Abstraction也可以发生变化(RefinedAbstraction),而且两者的变化是完全独立的,RefinedAbstraction与ConcreateImplementor之间松散耦合,它们仅仅通过Abstraction与Implementor之间的关系联系起来。强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高层次的操作。
策略模式:并不考虑Context的变化,只有算法的可替代性。强调Strategy抽象接口的提供的是一种算法,一般是无状态、无数据的,Context简单调用这些算法完成其操作。

所以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。
桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。
从结构图中可以看到,策略模式的结构是包容在桥接模式结构中的,Abstraction与Implementor之间就可以认为是策略模式,但是桥接模式一般Implementor将提供一系列的成体系的操作,而且Implementor是具有状态和数据的静态结构。而且桥接模式Abstraction也可以独立变化。

具体我还是觉得通过例子好理解一点,还有一句经典的话:自然流露到高内聚,低耦合才是真。 Have a nice day~
  • 大小: 76.5 KB
  • 大小: 55.1 KB
分享到:
评论
1 楼 谁说我不是会员 2014-02-27  

相关推荐

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    桥接模式和策略模式是软件设计模式中的两种重要模式,它们在实现上有着相似之处,但各自的应用场景和设计理念有所不同。下面将详细阐述这两种模式的特点、区别以及它们在实际编程中的应用。 首先,桥接模式(Bridge...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。 - 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。 - 装饰模式(Decorator):动态地给一个对象添加一些...

    设计模式-C++

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    软件设计模式--填空题+简答题(复习7).rar

    设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代器、访问者、备忘录、...

    设计模式之桥接模式

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件设计中常用于降低复杂性,提高代码的可扩展性和可维护性。通过桥接模式,我们可以将接口(抽象部分)与实现...

    C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式)

    在C#中,面向对象设计模式通常用于解决复杂度问题,桥接模式则是一种更为高级的设计策略。它通过引入一个抽象接口,将抽象类与其具体实现分离开来,形成两个独立的继承层次,这样抽象部分和实现部分都可以独立地进行...

    JAVA设计模式-chm版

    4. 参与讨论和分享,与其他开发者交流设计模式的理解和应用。 总之,“JAVA设计模式-chm版”资源对于深入理解并掌握Java设计模式具有很高的价值。通过学习和实践,开发者可以提升自己的编程技能,编写出更加高效、...

    设计模式-华工课件 设计模式

    软件测试-2009-11.rar文件可能是课程中的另一部分,可能涉及软件测试理论与实践,与设计模式相辅相成,共同构成了软件开发的重要基石。通过系统学习这些知识,开发者能更好地应对复杂系统的设计挑战,实现高质量、高...

    23种 设计模式---面向对象的基本原则

    - 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性...

    java版本二十三种设计模式.zip

    - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰...

    23种设计模式 -设计模式图解.7z

    23种设计模式的特点定义、优缺点、使用场景,源码中如何使用,资料思维导图。总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七...

    设计模式-2

    - 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。 - 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。 - 适配器模式:使两个不兼容的接口能够协同工作。 - 装饰模式:动态地给一个...

    JAVA设计模式-原则和23种设计模式归纳总结

    JAVA设计模式-原则和23种设计模式归纳总结 本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的...

    26种设计模式-----pdf

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板。这个压缩包文件名为"26种设计模式",其中可能详细介绍了软件开发中的26个核心设计模式。这些模式是经过时间检验、被广泛接受并反复使用...

    桥接模式-代理-iOS

    桥接模式是一种设计模式,它将抽象部分与它的实现部分分离,使得它们可以独立地进行变化。在iOS开发中,这种模式经常被用来解耦不同的组件,提高代码的可维护性和可扩展性。代理模式则是一种行为设计模式,用于在...

    《设计模式--基于C#的工程化实现及扩展》.(王翔).rar.rar

    本书涵盖了各种经典的设计模式,包括创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式)、结构型模式(如适配器模式、桥接模式、装饰模式、组合模式、外观模式、代理模式、享元模式)以及行为...

    软件设计模式与体系结构(讲解+代码)

    上篇:软件设计模式例子代码  【例2.2】简单工厂方法模式-汽车保险  【例2.3】工厂方法模式-汽车保险  【例2.4】抽象工厂模式-房屋信息  【例2.5】生成器模式-房屋信息  【例2.6】单例模式-互联网连接  ...

    设计模式-可复用面向对象软件的基础(中英文+src code)

    《设计模式 - 可复用面向对象软件的基础》是一本经典著作,由“Gang of Four”(GoF)所著,书中详细阐述了23种设计模式,对理解与应用设计模式有着深远的影响。 首先,我们要理解设计模式的核心理念:它们不是预...

Global site tag (gtag.js) - Google Analytics