详解设计模式:桥接模式
桥接模式(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("间谍过家家");}
}
详解设计模式:桥接模式相关推荐
- 代码详解设计模式--模板模式
模板模式 一个抽象类公开定义了执行方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行. 优点: 封装不变部分,扩展可变部分. 提取公共代码,便于维护. 行为由父类控制,子 ...
- C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)
C++设计模式--单例模式详解(懒汉模式.饿汉模式.双重锁) 应用场景 一.单例模式是什么? 二.使用步骤 1.UML图 2.代码实现 应用场景 通常我们在做通讯的时候,我们跟服务器数据交互,假如每次 ...
- 跟着ZHONGHuan学习设计模式--桥接模式
转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...
- 大型分布式架构详解:架构模式+敏捷性+可扩展+案例等
大型分布式架构详解:架构模式+敏捷性+可扩展+案例等 本篇是大型分布式网站架构的技术总结篇. 主要对大型分布式架构中涉及的架构模式.高性能.高可用.可伸缩.敏捷性.可扩展等技术点进行简要总结,对大型分 ...
- 模板模式详解、模板模式怎么用、模板模式模板代码
模板模式详解.模板模式怎么用.模板模式模板代码 文章目录 模板模式详解.模板模式怎么用.模板模式模板代码 @[toc] 模板模式定义 使用场景 优点 代码实操 模板模式定义 在模板模式(Templat ...
- 代码详解设计模式汇总
小博Spring Boot快速入门GitChat https://gitbook.cn/gitchat/activity/5a444c451f6ee91a25846ac1 小博代码详解设计模式 篇章 ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
- 【学习笔记】ABAP OOD设计模式 - 桥接模式
ABAP OOD设计模式 - 桥接模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 桥接模式又称为桥梁模式,在程序开发中,采用不同的维度分解一系列对象,然后采用组 ...
- window 程序报错 自动重启_好程序员web前端教程之详解JavaScript严格模式
好程序员web前端教程之详解JavaScript严格模式,严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,发布于2009年12月第五版.旨在改善错误检查功 ...
- jsp漂亮的登录界面源码_【案例+源码】详解MVC框架模式及其应用
案例+源码]详解MVC框架模式及其应用 写在开头: 首先我们需要知道,框架模式.模式.开发模式是三种不同的概念,但他们的目的都一样:解耦! 1.关于MVC框架模型 MVC是三个单词的缩写: M,Mod ...
最新文章
- linux驱动:TI+DM8127+GPIO(五)之plarform
- 孙立岩 python-basic: 用于学习python基础的课件(十三十四 十五)
- TCP的三次握手与四次挥手(详解+动图)
- 存在于一维空间的稳定分子
- QT调用C++写的Dll
- Bootstrap3 代码-程序输出
- 引入媒体播放器media player 并调试它的选择模式 0130
- 【目标检测】NMS和soft-NMS详解及代码实现
- 接口返回数据太大_Vue实战044:Mockjs模拟服务器Api接口并返回数据详解
- [?]Solaris下两个Oracle同时启动时遇到的问题
- 计算机管理员保密责任书,信息安全保密工作责任书
- Django 项目部署
- 计算机c盘无法扩展,win10c盘无法扩展卷怎么办
- 【升级到Java 17】switch 表达式
- 要成为云架构师需要学什么技能?
- 华为认证HCIE的含金量高吗,考试费用是多少?
- 图像处理gamma修正(伽马γ校正)的原理和实现算法
- 89.破碎的玻璃横幅
- java.io.FileNotFoundException: class path resource [com/wisely/highlight_spring4/ch2/aware/text.txt]
- 虚拟地址到物理地址的转换步骤