桥接模式(Bridge Pattern)也称为桥梁模式、接口模式或者柄体模式,有点像适配器模式,也是 GoF 的 23 种设计模式中的一种结构型设计模式。

桥接模式 是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

~

本篇内容包括:关于桥接模式、桥接模式实现 Demo


文章目录

  • 一、关于桥接模式
    • 1、关于桥接模式
    • 2、关于桥接模式的构成
    • 3、关于桥接模式的XML
    • 4、关于桥接模式的应用场景
    • 5、关于桥接模式的优缺点
  • 二、桥接模式 Demo
    • 1、Demo 设计
    • 2、Demo 实现
    • 3、Demo 测试

一、关于桥接模式

1、关于桥接模式

桥接模式(Bridge Pattern)也称为桥梁模式、接口模式或者柄体模式,有点像适配器模式,也是 GoF 的 23 种设计模式中的一种结构型设计模式。

桥接模式 是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

2、关于桥接模式的构成

外观模式主要包含四种角色:

  • 抽象化(Abstraction)角色: 该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现,抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);
  • 修正抽象(RefinedAbstraction)角色: Abstraction 的具体实现,对Abstraction 的方法进行完善和扩展;
  • 实现化(Implementor)角色: 确定实现维度的基本操作,提供给 Abstraction使用。该类一般为接口或者抽象类;
  • 具体实现(ConcreteImplementor)角色: Implementor 的具体实现;

3、关于桥接模式的XML

4、关于桥接模式的应用场景

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式适用于以下几种业务场景:

  • 在抽象和具体实现之间需要增加更多的灵活性的场景
  • 一个类存在两个或多个独立变化的维度,而这两个或多个维度都需要独立进行扩展
  • 不希望使用继承,或因为多层继承导致系统类的个数剧增

5、关于桥接模式的优缺点

# 桥接模式的优点

  • 抽象与实现分离,扩展能力强
  • 符合开闭原则
  • 符合合成复用原则
  • 其实现细节对客户透明

# 桥接模式的缺点

  • 由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

二、桥接模式 Demo

1、Demo 设计

开发一个跨平台视频播放器,可以在不同操作系统平台(如 Windows、Mac、Linux 等)上播放多种格式的视频文件,常见的视频格式包括 RMVB、AVI、WMV 等。该播放器包含了两个维度,适合使用桥接模式。

2、Demo 实现

# VideoFile 视频文件 Abstraction 角色

/*** 视频文件**/
public interface VideoFile {void decode(String fileName);
}

# avi文件 / rmvb文件 RefinedAbstraction 角色

/*** avi文件**/
public class AVIFile implements VideoFile {public void decode(String fileName) {System.out.println("avi视频文件:"+ fileName);}
}/*** rmvb文件**/
public class REVBBFile implements VideoFile {public void decode(String fileName) {System.out.println("rmvb文件:" + fileName);}
}

# OperatingSystem 操作系统 Implementor 角色

/*** 操作系统**/
public abstract class OperatingSystem {protected VideoFile videoFile;public OperatingSystem(VideoFile videoFile) {this.videoFile = videoFile;}public abstract void play(String fileName);
}

# Windows / Mac ConcreteImplementor 角色

/*** Windows版本**/
public class Windows extends OperatingSystem {public Windows(VideoFile videoFile) {super(videoFile);}public void play(String fileName) {videoFile.decode(fileName);}
}/*** Mac版本**/
public class Mac extends OperatingSystem {public Mac(VideoFile videoFile) {super(videoFile);}public void play(String fileName) {videoFile.decode(fileName);}
}

3、Demo 测试

/*** 测试类**/
public class Client {public static void main(String[] args) {OperatingSystem os = new Windows(new AVIFile());os.play("间谍过家家");}
}

详解设计模式:桥接模式相关推荐

  1. 代码详解设计模式--模板模式

    模板模式   一个抽象类公开定义了执行方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行. 优点: 封装不变部分,扩展可变部分. 提取公共代码,便于维护. 行为由父类控制,子 ...

  2. C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)

    C++设计模式--单例模式详解(懒汉模式.饿汉模式.双重锁) 应用场景 一.单例模式是什么? 二.使用步骤 1.UML图 2.代码实现 应用场景 通常我们在做通讯的时候,我们跟服务器数据交互,假如每次 ...

  3. 跟着ZHONGHuan学习设计模式--桥接模式

    转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...

  4. 大型分布式架构详解:架构模式+敏捷性+可扩展+案例等

    大型分布式架构详解:架构模式+敏捷性+可扩展+案例等 本篇是大型分布式网站架构的技术总结篇. 主要对大型分布式架构中涉及的架构模式.高性能.高可用.可伸缩.敏捷性.可扩展等技术点进行简要总结,对大型分 ...

  5. 模板模式详解、模板模式怎么用、模板模式模板代码

    模板模式详解.模板模式怎么用.模板模式模板代码 文章目录 模板模式详解.模板模式怎么用.模板模式模板代码 @[toc] 模板模式定义 使用场景 优点 代码实操 模板模式定义 在模板模式(Templat ...

  6. 代码详解设计模式汇总

    小博Spring Boot快速入门GitChat https://gitbook.cn/gitchat/activity/5a444c451f6ee91a25846ac1 小博代码详解设计模式 篇章 ...

  7. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  8. 【学习笔记】ABAP OOD设计模式 - 桥接模式

    ABAP OOD设计模式 - 桥接模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 桥接模式又称为桥梁模式,在程序开发中,采用不同的维度分解一系列对象,然后采用组 ...

  9. window 程序报错 自动重启_好程序员web前端教程之详解JavaScript严格模式

    好程序员web前端教程之详解JavaScript严格模式,严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,发布于2009年12月第五版.旨在改善错误检查功 ...

  10. jsp漂亮的登录界面源码_【案例+源码】详解MVC框架模式及其应用

    案例+源码]详解MVC框架模式及其应用 写在开头: 首先我们需要知道,框架模式.模式.开发模式是三种不同的概念,但他们的目的都一样:解耦! 1.关于MVC框架模型 MVC是三个单词的缩写: M,Mod ...

最新文章

  1. linux驱动:TI+DM8127+GPIO(五)之plarform
  2. 孙立岩 python-basic: 用于学习python基础的课件(十三十四 十五)
  3. TCP的三次握手与四次挥手(详解+动图)
  4. 存在于一维空间的稳定分子
  5. QT调用C++写的Dll
  6. Bootstrap3 代码-程序输出
  7. 引入媒体播放器media player 并调试它的选择模式 0130
  8. 【目标检测】NMS和soft-NMS详解及代码实现
  9. 接口返回数据太大_Vue实战044:Mockjs模拟服务器Api接口并返回数据详解
  10. [?]Solaris下两个Oracle同时启动时遇到的问题
  11. 计算机管理员保密责任书,信息安全保密工作责任书
  12. Django 项目部署
  13. 计算机c盘无法扩展,win10c盘无法扩展卷怎么办
  14. 【升级到Java 17】switch 表达式
  15. 要成为云架构师需要学什么技能?
  16. 华为认证HCIE的含金量高吗,考试费用是多少?
  17. 图像处理gamma修正(伽马γ校正)的原理和实现算法
  18. 89.破碎的玻璃横幅
  19. java.io.FileNotFoundException: class path resource [com/wisely/highlight_spring4/ch2/aware/text.txt]
  20. 虚拟地址到物理地址的转换步骤

热门文章

  1. python遍历数组的两种方法_python同时遍历数组的索引和值的实例
  2. 软件测试常用模块测试点(登录)
  3. [第一讲]DSP28335将Flash中的代码拷贝到RAM中运行
  4. Linus 在谷歌介绍 Git,内容很精彩,还顺带骂了一堆人(视频)
  5. 网速慢?这8种方法可以彻底解决
  6. T149基于51单片机4层电梯控制器Proteus设计、keil程序、c语言、源码
  7. 永硕E盘:很实用的网络硬盘和网址收藏夹
  8. 西北工业大学NOJ-Python程序设计作业81-90
  9. 树莓派+温度传感器实现室内温度监控
  10. android中使用tmf框架插件化开发的问题