设计模式之桥接模式笔记

news/2024/10/30 23:24:32/

设计模式之桥接模式笔记

  • 说明
  • Bridge(桥接)
  • 目录
  • 桥接模式示例类图
    • 视频文件接口
    • avi视频文件类
    • rmvb视频文件类
    • 抽象的操作系统类
    • windows类
    • mac类
    • 测试类

说明

记录下学习设计模式-桥接模式的写法。JDK使用版本为1.8版本。

Bridge(桥接)

意图:将抽象部分与其实现部分分离,使它们都可以独立地变化。
结构:
在这里插入图片描述
其中:

  • Abstraction定义抽象类的接口,维护一个指向Implementor类型对象的指针。
  • RefinedAbstraction扩充由Abstraction定义的接口。
  • Implementor定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同。一般来说,Implementor接口仅提供基本操作,而Abstraction定义了基于这些基本操作的较高层次的操作。
  • ConcreteImplementor实现Implementor接口并定义它的具体实现。

适用性:

  • 当一个类存在两个独立变化的维度,且这两个都需要进行扩展时。
  • 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

目录

在这里插入图片描述

桥接模式示例类图

在这里插入图片描述

以该UML类图实现桥接模式示例。

视频文件接口

package com.example.deesign_patterns.bridge;//视频文件
public interface VideoFile {//解码功能void decode(String fileName);
}

avi视频文件类

package com.example.deesign_patterns.bridge;//avi视频文件类
public class AviFile implements VideoFile{@Overridepublic void decode(String fileName) {System.out.println("avi视频文件:"+fileName);}
}

rmvb视频文件类

package com.example.deesign_patterns.bridge;//rmvb视频文件类
public class RmvbFile implements VideoFile{@Overridepublic void decode(String fileName) {System.out.println("rmvb视频文件:"+fileName);}
}

抽象的操作系统类

package com.example.deesign_patterns.bridge;//抽象的操作系统类
public abstract class OperatingSystem {//声明VideoFile变量protected VideoFile videoFile;public OperatingSystem(VideoFile videoFile) {this.videoFile = videoFile;}//播放视频方法public abstract void play(String fileName);
}

windows类

package com.example.deesign_patterns.bridge;//windows类
public class Windows extends OperatingSystem{public Windows(VideoFile videoFile) {super(videoFile);}@Overridepublic void play(String fileName) {videoFile.decode(fileName);}
}

mac类

package com.example.deesign_patterns.bridge;//mac类
public class Mac extends OperatingSystem{public Mac(VideoFile videoFile) {super(videoFile);}@Overridepublic void play(String fileName) {videoFile.decode(fileName);}
}

测试类

package com.example.deesign_patterns.bridge;//测试类
public class Client {public static void main(String[] args) {//创建mac系统对象OperatingSystem system=new Mac(new AviFile());//使用操作系统播放视频文件system.play("战狼3");}
}

在这里插入图片描述

好处:

  • 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。如:如果现在还有一种视频文件类型wmv,我们只需要再定义一个类实现VideoFile接口即可,其他类不需要发生变化。
  • 实现细节对客户透明。

http://www.ppmy.cn/news/523538.html

相关文章

最佳5款适合 3D 建模和渲染笔记本电脑

为任何类型的职业选择笔记本电脑都需要做一些研究,但是如果我们谈论寻找最适合 3D 建模和渲染的笔记本电脑,则有必要深入了解我们将需要的规格和要求我们将要使用的专用软件,否则可能会选择错误的计算机,并为此付出高昂的代价。 …

苹果27英寸iMac更新发布:外观不变,性能升级,iMac Pro也有更新

苹果刚刚已经发布了 27 英寸 iMac 5K 的更新版本,外观没变,主要是性能的升级,处理器全面为英特尔第10 Comet Lake处理器,还有新一代AMD Radeon Pro 5000系列图形显卡。摄像头换成1080P,SSD固态硬盘成了标配&#xff0c…

第二代天神:克罗诺斯

克罗诺斯成为第二代天神后,担心他的兄弟们觊觎宝座,故将独目巨人和百臂巨人关入了塔尔塔洛斯,后感觉还不够,将其他兄弟们也关进去了,只把姐妹种最漂亮年轻的瑞亚留在了身边并成为了他的妻子。 克罗诺斯预测到将会被儿…

DjVu Reader Pro for Mac(DjVu阅读软件)

DjVu Reader Pro mac版是一款Mac平台上功能最全的DjVu阅读软件。DjDjVu Reader Pro版的功能包括:支持多页DjVu文件,搜索功能,查看黑白或全彩色文件,书签功能,单/双页模式,自定义窗口背景颜色,页…

【GaussDB精品课第9期】数据库设计之SQL优化

在上期视频中,大家对GaussDB内核SQL引擎有了初步了解。本期视频将带你继续深入学习GaussDB SQL调优及分布式系统优化。 本期你将重点学习到以下内容: GaussDB SQL调优基础及相关调优工具使用。 GaussDB分布式系统AP类业务和TP类业务的调优思路。 【Ga…

雅克德罗机器人_纯机械时代的巅峰——雅克德罗机器人

纯机械时代的巅峰——雅克德罗机器人 雅克德罗JaquetDroz机器人 在1774年,也就是乾隆三十八年。瑞士钟表匠皮埃尔雅克德罗就和他的两个儿子亨利路易以及让弗雷德里克莱斯苏制作出了三个极尽精巧的机器人。 这三个分别称为书写者、绘图员和音乐家的机器人通过齿轮系统…

BlueROV加舵机控制以及走过的弯路

BlueROV加舵机控制以及走过的弯路 因实验需求,需要在BlueROV上加上一个一自由度的机械臂,由一个水下舵机控制,水下舵机需要通过PWM控制,PWM输出由手柄控制。 思路也很简单:手柄——pixhawk——舵机 就是弯路走了好久。…

NORDIC的打怪之旅(第二篇)

Nordic的52832芯片中有很多可以使用的协议,在其的官方文档中可以查看到(地址 在第一篇SDK的网址是一样的),其中使用最多的为spi,twi等,而twi中又完全兼容I2C协议,今天的目的主要是说明一下spi的…