【设计模式-桥接】

server/2024/11/14 15:24:11/

定义

桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要用途是避免类层次结构的指数增长,尤其是在有多维度变化时,例如设备种类与设备操作。

UML图

在这里插入图片描述

角色说明

  • Abstraction(抽象类):提供客户端调用的接口,内部包含一个对实现部分对象(Implementor)的引用。
  • RefinedAbstraction(扩展抽象类):扩展了Abstraction的功能,通过调用Implementor来实现具体操作。
  • Implementor(实现接口):定义实现部分的接口,它不一定与Abstraction的接口完全一致,一般是独立的。
  • ConcreteImplementor(具体实现类):实现具体的功能逻辑,它是实现部分的具体实现。

代码

java">// 实现接口
interface Implementor {void operationImpl();
}// 具体实现类A
class ConcreteImplementorA implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorA's implementation.");}
}// 具体实现类B
class ConcreteImplementorB implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB's implementation.");}
}// 抽象类
abstract class Abstraction {protected Implementor implementor;public Abstraction(Implementor implementor) {this.implementor = implementor;}public abstract void operation();
}// 扩展抽象类
class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor implementor) {super(implementor);}@Overridepublic void operation() {System.out.print("RefinedAbstraction is calling: ");implementor.operationImpl();}
}// 客户端代码
public class BridgePatternDemo {public static void main(String[] args) {Implementor implA = new ConcreteImplementorA();Abstraction abstractionA = new RefinedAbstraction(implA);abstractionA.operation();Implementor implB = new ConcreteImplementorB();Abstraction abstractionB = new RefinedAbstraction(implB);abstractionB.operation();}
}

适用场景

  • 当系统需要在多个维度上进行扩展,而又不希望产生大量的子类时。例如,设备种类(手机、电脑等)和设备操作(开机、关机、重启等)是两个独立的维度,可以使用桥接模式来分别处理。
  • 当一个类需要在不同的环境下工作,且这些环境可能随时变化。
    需要动态地切换实现时,桥接模式可以提供灵活性,因为实现和抽象可以独立变化。

总结

桥接模式通过将抽象与实现解耦,提供了一种灵活扩展和维护系统的方式,尤其适用于系统可能在多个维度上扩展的场景。


http://www.ppmy.cn/server/119636.html

相关文章

几种手段mfc140u.dll丢失的解决方法,了解mfc140u.dll

在使用Windows操作系统时,许多用户可能会遇到“找不到mfc140u.dll”或“mfc140u.dll未找到”的错误提示。这个错误通常是由于该文件丢失或损坏所致。本文将详细介绍mfc140u.dll文件的作用、丢失的原因及其解决方法,帮助您快速恢复系统的正常运行。 一、m…

leetcode刷题day13|二叉树Part01(递归遍历、迭代遍历、统一迭代、层序遍历)

递归遍历 思路:使用递归的方式比较简单。 1、递归函数的传参:因为最后输出一个数组,所以需要传入根节点和一个容器,本来想写数组,但发现长度不能确定,所以选择list。 2、终止条件:当访问的节点…

Windows上,使用远程桌面连接Ubuntu

要在 Ubuntu 上设置公网 IP 并通过 Windows 远程桌面连接到 Ubuntu,你需要完成以下步骤: 设置 Ubuntu 公网 IP: 确保你的 Ubuntu 服务器已经配置了一个公网 IP 地址。 你可以通过云服务提供商(如 AWS、Azure、Google Cloud&#…

uView使用心得

说实话我不爱用这个库,感觉很鸡肋,坑很多,可能没用习惯 picker选择器 绑定默认值是通过设置index,并且这个index需要通过api设置进去,设置defalutindex绑定值无效(只有初始化可以,后面动态改变…

《Python数据分析基础》第一章-Python基础(1.4-1.4.4)

1.4 Python语言基础要素 1.4.1 数值 1.4.1.1 整数 x 9 print("Output #4: {0}".format(x)) print("Output #5: {0}".format(3**4)) #3的4次方# 浮点型转为整型会进行向下取整 print("Output #6: {0}".format(int(8.3)/int(2.7)))方法int(x […

linux-Linux 内核与模块管理-内核基础

Linux 内核是操作系统的核心,它负责管理硬件资源和提供系统调用接口供用户程序使用。Linux 内核的设计极为灵活和模块化,它允许开发者通过加载和卸载模块来动态地扩展内核的功能。 一、Linux 内核概述 1.1 内核的基本功能 Linux 内核的主要功能可以分…

Vue3使用Websocket进行跨页面通信

安装 npm i ws 安装vue3响应式库 npm i vue/reactivity 服务端创建连接--nodejs // Nodejs 端 index.js// 引入 WebSocket 库 const WebSocket require(ws); // 引入 Vue 响应式 API const reactivity require(vue/reactivity)const {ref,computed,watch } reactivity/…

相亲交友程序系统开发产品分析

相亲交友系统是一种专门为单身人士设计的社交平台,旨在帮助他们找到合适的伴侣。这类系统通常包括了线上和线下的多种互动方式,能够让参与者在舒适的环境中相识、相知。编辑:qawsed2466。以下是相亲交友系统的一些关键特点和优势:…