桥接模式(Bridge Pattern)也称为桥梁模式、接口模式或者柄体模式,有点像适配器模式,也是 GoF 的 23 种设计模式中的一种结构型设计模式。
桥接模式 是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
~
本篇内容包括:关于桥接模式、桥接模式实现 Demo
文章目录
一、关于桥接模式1、关于桥接模式2、关于桥接模式的构成3、关于桥接模式的XML4、关于桥接模式的应用场景5、关于桥接模式的优缺点 二、桥接模式 Demo1、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("间谍过家家");}}
如果觉得《详解设计模式:桥接模式》对你有帮助,请点赞、收藏,并留下你的观点哦!