【设计模式最终总结】桥接模式

桥接模式概述

桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。

桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。桥接定义如下:
  桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。

桥接模式结构如图

在桥接模式结构图中包含如下几个角色:

●Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。

●RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。

●Implementor(实现类接口):定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多更复杂的操作。Implementor接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。

●ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现,在程序运行时,ConcreteImplementor对象将替换其父类对象,提供给抽象类具体的业务操作方法。

桥接模式是一个非常有用的模式,在桥接模式中体现了很多面向对象设计原则的思想,包括“单一职责原则”、“开闭原则”、“合成复用原则”、“里氏代换原则”、“依赖倒转原则”等。熟悉桥接模式有助于我们深入理解这些设计原则,也有助于我们形成正确的设计思想和培养良好的设计风格。

可以看出: 

桥接模式的设计目的:处理多维度变化;设计原则:分离不同的变化方向。本质:面向接口编程。做法:在类里存一个接口。

桥接模式总结

桥接模式是设计Java虚拟机和实现JDBC等驱动程序的核心模式之一,应用较为广泛。在软件开发中如果一个类或一个系统有多个变化维度时,都可以尝试使用桥接模式对其进行设计。桥接模式为多维度变化的系统提供了一套完整的解决方案,并且降低了系统的复杂度。

1.主要优点

桥接模式的主要优点如下:

(1)分离抽象接口及其实现部分。桥接模式使用“对象间的关联关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化,也就是说抽象和实现不再在同一个继承层次结构中,而是“子类化”它们,使它们各自都具有自己的子类,以便任何组合子类,从而获得多维度组合对象。

(2)在很多情况下,桥接模式可以取代多层继承方案,多层继承方案违背了“单一职责原则”,复用性较差,且类的个数非常多,桥接模式是比多层继承方案更好的解决方法,它极大减少了子类的个数。

(3)桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合“开闭原则”。

2.主要缺点[其实这两个缺点优点牵强了,任何设计都会增加代码阅读的难度]

桥接模式的主要缺点如下:

(1)桥接模式的使用会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程。

(2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性,如何正确识别两个独立维度也需要一定的经验积累。

3.适用场景

在以下情况下可以考虑使用桥接模式:

(1)如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过桥接模式可以使它们在抽象层建立一个关联关系。

(2)“抽象部分”和“实现部分”可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。

(3)一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展。

(4)对于那些不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。

原文地址:https://www.cnblogs.com/aoyihuashao/p/10264392.html

时间: 2024-11-05 22:35:20

【设计模式最终总结】桥接模式的相关文章

设计模式入门之桥接模式Bridge

//桥接模式定义:将抽象部分与它的实现部分分离,使得他们都可以独立地变化 //广义来讲,桥接模式非常普遍,面向抽象编程,面向接口编程就可以看作是他的体现 //实例:一个系统,要按照不同的要求发信息(普通,加急,特急),而且还要以不同的方式发送(站内信,Email,短信)等,考虑到其扩展性,用桥接模式再合适不过了 //上代码 //桥接的一半---抽象部分 public abstract class AbstractionMessage { protected MessageImplementor

设计模式学习笔记-桥接模式

一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 二.模式中的角色 Abstraction:定义抽象类的接口:维护一个指向Implementor类型对象的指针: RefinedAbstraction:扩充由Abstraction定义的接口: Implementor:定义具体行为,具体特征的应用接口: ConcreteImplementor:实现Implementor. 三.UML类图 四.代码实现 4.1 桥接模式的实现代码 /// <summary> /// 实现 /// &

[设计模式] javascript 之 桥接模式

桥接模式说明 定义:分离抽象化与实现化,使之可以自由独立的变化: 说明:由于软件环境需求原因,使得类型抽象具有多种实现以自身变化定义等情况,这使得我们要分离抽象实现与具体实现,使得抽象化与实现化解耦,使之可以分开独立的变化,使得两者可以自由添加各自处理过程实现. 桥接模式就可以解决上面的问题,桥接模式的角色: 1. 抽象化角色,这个抽象化类中定义对 实现化接口定义的引用: 2. 修正抽象化角色,这个角色扩展并修改抽象化接口定义的实现,该修改用于引用实现化接口的实现的 (底层) 操作: 3. 实现

《Java设计模式》之桥接模式

Bridge模式的概念 Bridge 模式是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. Bridge模式的应用场景 面向对象的程序设计(OOP)里有类继承(子类继承父类)的概念,如果一个类或接口有多个具体实现子类,如果这些子类具有以下特性: - 存在相对并列的子类属性. -

Java设计模式系列之桥接模式

桥接模式(Bridge)的定义 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 桥接模式(Bridge)的动机 当一种抽象类型可能有多种实现方式时,一般情况我们可以考虑使用继承来解决抽象类型的多种实现,在抽象类型中定义接口,而子类负责接口的具体实现.但这种做法缺乏灵活性,由于抽象类型和子类之间紧紧地绑定在一起,使得这种关系在运行时不能再修改,这使得它难以修改.扩展和重用

Java设计模式学习记录-桥接模式

前言 这次介绍结构型设计模式中的第二种模式,桥接模式. 使用桥接模式的目的就是为了解耦,松散的耦合更利于扩展,但是会增加相应的代码量和设计难度. 桥接模式 桥接模式是为了将抽象化与实现化解耦,让二者可以独立地变化.方便对每一部分的扩展,以及单独的维护.抽象化的一方与实现化的一方之间建立一个桥梁,这样两者的依赖关系就可以通过这个桥梁来建立了. 举例 三个小动物要过河,分别是小猪,小鸡,小马,小猪要去河对面的空地晒太阳,小鸡要去河对面的小树林里找虫子吃,小马要去河对面的草地里吃草.那么它们三个都要经

Java-马士兵设计模式学习笔记-桥接模式

一.概述 1.桥接模式的应用情况:(1)两个维度扩展(2)排列组合 二.代码 1.Gift.java 1 public class Gift { 2 3 protected GiftImpl giftImpl; 4 } 2.GiftImpl.java 1 public class GiftImpl { 2 3 } 3.WarmGift.java 1 public class WarmGift extends Gift { 2 3 public WarmGift(GiftImpl giftImpl

设计模式(7)--Bridge(桥接模式)--结构型

1.模式定义: 桥接模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”. 2.模式特点: 桥接模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助.理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格. 桥接模式的用意是“将抽象化(Ab

设计模式之【桥接模式--Bridge】

桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了;

23种设计模式中的桥接模式

桥接模式:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变. 个人见解:实际上是为了同时实现两个协议,而让其中一个协议让父类实现而另一个协议自己实现. public interface IA{ public void a(); } public interface IB{ public void b(); } public ABfather implements IA{ @override public void a(){} } public AB extends ABfather i