1 桥接模式的定义

桥接模式(Bridge Pattem):将抽象部分和实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称柄体模式或者接口模式。

2 为什么引入桥接模式

当用户采用多继承的方式实现代码时,增加一个新的种类非常不方便(可拓展性差)。如上图,我想增加一个奥迪类,则需要在跑车中增加奥迪跑车类,在SUV中增加奥迪SUV类,这仅仅是两个,如果是多的话会更加的麻烦。

同时也违反了 单一职责原则。

桥接模式可以很好的优化这一问题。

3 桥接实战

把上面的例子总结一下,可以得到如下的图。

桥接模式的作用就如同中间的点,将类型和品牌联系起来。

3.1 代码

Brand.interface

//品牌接口
public interface Brand {
    public void info();
}

BMW

public class BMW implements Brand{
    @Override
    public void info() {
        System.out.print("宝马");
    }
}

Benz

public class Benz implements Brand{
    @Override
    public void info() {
        System.out.print("奔驰");
    }
}

Car

public abstract class Car {
    protected Brand brand;
    public Car(Brand brand) {
        this.brand = brand;
    }
    public void info()
    {
        brand.info();
    }
}

SportsCar

public class SportsCar extends Car{
    public SportsCar(Brand brand) {
        super(brand);
    }
    @Override
    public void info() {
        super.info();
        System.out.println("跑车");
    }
}

SUV

public class SUV extends Car{
    public SUV(Brand brand) {
        super(brand);
    }
    @Override
    public void info() {
        super.info();
        System.out.println("越野车");
    }
}

Client

public class Client {
    public static void main(String[] args) {
        //宝马跑车
        Car car = new SportsCar(new BMW());
        car.info();
    }
}

3.2 类图

将多继承转化为桥接模式之后,如果在想增加一个凯利拉克,就只需要在Car里面增加一个凯利拉克,而不需要对其他类进行改动。

4 桥接模式的优缺点

4.1 优点

  • 桥接模式偶尔类似于多继承方案,但是多继承方案违背了类的单一职责原则,复用性比较差,类的个数也非常多,桥接模式是比多继承方案更好的解决方法。极大的减少了子类的个数,从而降低管理和维护的成本。
  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意拓展一个维度,都不需要修改原有的系统。符合开闭原则,就像一座桥,可以把两个变化的维度连接起来。

4.2 缺点

  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

4.3 适用环境

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

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

一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计需求需要独立管理这两者。

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

4.4 场景

  • Java语言通过Java虚拟机实现跨平台性
  • AWT中的Peer架构

然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计需求需要独立管理这两者。

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

  • Java语言通过Java虚拟机实现跨平台性
  • AWT中的Peer架构
  • JDBC驱动程序也是桥接模式的应用之一

到此这篇关于详解Java设计模式之桥接模式的文章就介绍到这了,更多相关Java桥接模式内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

详解Java设计模式之桥接模式的更多相关文章

  1. MVVM 不是那么好

    我觉得MVVM是一种反人类的设计模式,它使架构更加混乱而非清晰。MVVM命名很糟糕名称是很重要的。ViewModel这一名称则没有发挥任何作用。ViewModel的第一种含义是modelfortheview。MVVM引进太多职责命名不够具体,导致这个类的任务无休止地增长。MVVM不改变你的架构viewmodel并不能从根本上改变你的应用程序的架构。我能想到的MVVM模式最大的好处就是它把“下水道”从苹果自带的viewcontrooller类转移到了viewmodel这一自定义的对象。

  2. 开发Swift iOS应用程序“正确的方式”

    最近,我学习了Swift和开发iOS应用程序的基础知识。现在,我想自己开发一个真正的应用程序,但我非常关心编写好的代码,所以我已经寻找“最佳实践”,“设计模式”和“正确的方式”来实现它。在我的搜索中,我发现这个greattutorial关于SwiftiOS应用程序中通常使用的所有设计模式,以及他们使用的示例。不应该将httpClient和persistencyManager声明为协议,然后HttpClient和PersistencyManager类实现该协议?我应该在哪里告诉应用程序?最后但并非最不重要的

  3. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. javascript的23种设计模式示例总结大全

    这篇文章主要为大家介绍了javascript的23种设计模式的总结大全,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  7. 详解JavaScript实现设计模式中的适配器模式的方法

    适配器模式可以根据需求转换(或调整)一个接口,创建含有您所需接口的另一个对象,并将它连接到您想改变接口的对象,从而完成这种转换,下面就来详解JavaScript实现设计模式中的适配器模式的方法

  8. Java实现世界上最快的排序算法Timsort的示例代码

    Timsort 是一个混合、稳定的排序算法,简单来说就是归并排序和二分插入排序算法的混合体,号称世界上最好的排序算法。本文将详解Timsort算法是定义与实现,需要的可以参考一下

  9. PHP设计模式之工厂模式详解

    这篇文章主要为大家详细介绍了PHP设计模式之工厂模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Java日期工具类的封装详解

    在日常的开发中,我们难免会对日期格式化,对日期进行计算,对日期进行校验,为了避免重复写这些琐碎的逻辑,我这里封装了一个日期工具类,方便以后使用,直接复制代码到项目中即可使用,需要的可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部