桥接模式 (Bridge Pattern)

devtools/2024/11/23 20:13:46/

桥接模式 (Bridge Pattern)

桥接模式是一种 结构型设计模式,用于将抽象部分与实现部分分离,使它们可以独立变化。它通过组合的方式取代继承,将不同维度的变化解耦,从而提高系统的灵活性。


原理

  1. 核心思想:将一个对象的 抽象部分实现部分 分离开,分别独立定义和扩展。
  2. 适用场景
    • 当一个类有多个维度的变化,需要独立扩展时。
    • 避免因为多维度的变化导致类的数量爆炸。
    • 不希望使用继承方式来扩展时。
  3. 参与角色
    • Abstraction(抽象类):定义高层抽象的接口,持有 Implementor 的引用。
    • RefinedAbstraction(具体抽象类):扩展抽象类,具体化抽象类的方法。
    • Implementor(实现接口):定义实现类的接口。
    • ConcreteImplementor(具体实现类):实现具体的功能。

优点

  1. 分离抽象与实现:抽象和实现部分独立扩展。
  2. 灵活性高:通过组合而非继承,避免类的复杂层级关系。
  3. 扩展性强:可以独立扩展抽象层和实现层,而不影响彼此。

缺点

  1. 复杂性增加:引入额外的抽象层,增加了系统复杂度。
  2. 理解难度较高:相对于简单的继承关系,桥接模式的设计需要更高的理解能力。

示例代码

场景描述

假设我们需要开发一个形状绘制系统,其中形状和颜色是两个维度。如果直接使用继承,可能需要 红色圆形蓝色圆形红色矩形 等多个类。使用桥接模式,可以将形状和颜色分离,分别实现和扩展。


1. 定义实现接口
java">// 定义实现接口
public interface Color {void applyColor();
}

2. 创建具体实现类
java">// 红色实现类
public class RedColor implements Color {@Overridepublic void applyColor() {System.out.println("Applying red color");}
}// 蓝色实现类
public class BlueColor implements Color {@Overridepublic void applyColor() {System.out.println("Applying blue color");}
}

3. 定义抽象类
java">// 定义抽象类
public abstract class Shape {protected Color color; // 持有实现接口的引用public Shape(Color color) {this.color = color;}public abstract void draw();
}

4. 创建具体抽象类
java">// 圆形
public class Circle extends Shape {public Circle(Color color) {super(color);}@Overridepublic void draw() {System.out.print("Drawing Circle with ");color.applyColor();}
}// 矩形
public class Rectangle extends Shape {public Rectangle(Color color) {super(color);}@Overridepublic void draw() {System.out.print("Drawing Rectangle with ");color.applyColor();}
}

5. 客户端代码
java">public class BridgePatternExample {public static void main(String[] args) {// 创建红色的圆形Shape redCircle = new Circle(new RedColor());redCircle.draw();// 创建蓝色的矩形Shape blueRectangle = new Rectangle(new BlueColor());blueRectangle.draw();}
}

输出结果
Drawing Circle with Applying red color
Drawing Rectangle with Applying blue color

UML 类图

        +----------------+                 +------------------+|  Shape         |                 |   Color          |+----------------+                 +------------------+| - color: Color |<>-------------->| + applyColor()   || + draw()       |                 +------------------++----------------+                         ^^                                    ||                                    |+--------------------+               +--------------------+| Circle             |               | RedColor          |+--------------------+               +--------------------+| + draw()           |               | + applyColor()    |+--------------------+               +--------------------+|+--------------------+| BlueColor         |+--------------------+| + applyColor()    |+--------------------+

使用场景

  1. 多维度变化
    • 产品和平台、图形和颜色等需要独立扩展的场景。
  2. 避免继承扩展爆炸
    • 如果不使用桥接模式,多维度变化可能导致继承关系过于复杂。
  3. 需要动态组合
    • 在运行时灵活选择实现。

小结

  • 桥接模式解耦了 抽象部分实现部分,使它们可以独立扩展,提升了灵活性。
  • 实际开发中,桥接模式常用于 跨平台开发图形绘制驱动程序设计 等需要多维度变化的场景。

http://www.ppmy.cn/devtools/136374.html

相关文章

大模型基本能力评测---知识利用

文章目录 闭卷问答开卷问答知识补全主要问题知识利用(Knowledge Utilization)能力对于大语言模型非常关键,它赋予了模型执行知识密集型任务的能力,如回答常识性问题或基于知识信息进行相关推理。为了充分发挥这一能力,大语言模型需要在预训练阶段学习到丰富的世界语义知识…

RHCE 函数与数组

第六章、函数和数组 6.1 函数 函数几乎是学习所有的程序设计语言时都必须过的一关。对于学习过其他的程序语言的用户来说&#xff0c;函数可能并不陌生。但是Shell中的函数与其他的程序设计语言的函数有许多不同之处。为了使用户了解Shell中的函数&#xff0c;本节将介绍函数…

【bug】python常见的错误以及解决办法

有人问&#xff0c;如果我学python那么肯定会遇见一些问题和故障bug&#xff0c;那么该怎么办&#xff0c;其实在Python编程中&#xff0c;遇到bug是家常便饭。这里我将列举几种常见的Python错误及其解决方案&#xff1a; 1. SyntaxError: invalid syntax 描述&#xff1a;当…

【蓝桥杯备赛】深秋的苹果

# 4.1.1. 题目解析 要求某个区间内的数字两两相乘的总和想到前缀和&#xff0c;但是这题重点在于两两相乘先硬算&#xff0c;找找规律&#xff1a; 比如要算这串数字的两两相乘的积之和&#xff1a; 1, 2, 3 1*2 1*3 2*3 1*(23) 2*3 前缀和数组&#xff1a; 1 3 6 发现…

ubuntu 安装 yum 无法定位问题

前言&#xff1a;yum安装方法其实很简单&#xff0c;知识使用apt install yum 即可&#xff0c;但是会遇到了各种问题&#xff0c;报‘E: 无法定位软件包 yum’&#xff0c;apt下载源问题。 1.问题 系统&#xff1a;ubuntu22.04 yum报错&#xff1a;E: 无法定位软件包 yum …

【Vue】设置el-tabs,el-tab-pane字体颜色大小

前言 好久不见&#xff01;真的是很久很久啦&#xff01;本来开了个新专栏&#xff08;收费的&#xff0c;又穷了我&#xff0c;好想赚钱啊&#xff09;可是又忙又懒&#xff0c;写了好几篇草稿&#xff0c;但是都不满意&#xff0c;导致一直没发&#xff0c;最近很忙&#xff…

融入模糊规则的宽度神经网络结构

文章目录 论文概述创新点及贡献 算法流程讲解核心代码复现main.py文件FBLS.py文件 使用方法测试结果示例&#xff1a;使用公开数据集进行本地训练准备数据 定义数据转换&#xff08;预处理&#xff09;下载并加载训练数据集下载并加载测试数据集将每张图片展平并检查加载的数据…

设计模式:6、装饰模式(包装器)

目录 0、定义 1、装饰模式包含的四种角色 2、装饰模式的UML类图 3、示例代码 0、定义 动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。 1、装饰模式包含的四种角色 抽象组件&#xff08;Component&#xff09;&#xff1a;抽象组件是一个抽象…