结构型模式-桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与它的实现部分分离,以便两者可以独立地变化。它通过提供一个抽象层将它们连接起来,从而避免了类的爆炸式扩展,尤其在面对复杂对象时显得特别有用。

核心思想

桥接模式的核心是组合优于继承。它使用组合的方式,将一个类的抽象部分和实现部分分离开,使得它们可以独立地扩展,而不是通过继承强耦合在一起。

结构

桥接模式的主要参与者有以下几个部分:

  • 抽象类(Abstraction): 定义高层的抽象接口,维护一个指向实现部分(Implementor)的引用。

  • 实现类接口(Implementor): 定义实现类的接口,通常是抽象方法。

  • 具体实现类(ConcreteImplementor): 实现 Implementor 接口,定义具体实现。

  • 扩展抽象类(RefinedAbstraction): 在抽象类的基础上进行扩展,通常会调用 Implementor 的方法。

案例代码

示例:绘图工具

假设你想设计一个可以绘制形状(圆形、正方形)的工具,同时需要支持多种颜色(红色、蓝色)。

java 复制代码
// 实现接口
interface Color {
    void applyColor();
}

// 具体实现类
class RedColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color.");
    }
}

class BlueColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying blue color.");
    }
}

// 抽象类
abstract class Shape {
    protected Color color; // 组合颜色

    public Shape(Color color) {
        this.color = color;
    }

    abstract void draw();
}

// 扩展抽象类
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.print("Drawing Circle with ");
        color.applyColor();
    }
}

class Square extends Shape {
    public Square(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.print("Drawing Square with ");
        color.applyColor();
    }
}

// 使用桥接模式
public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new RedColor());
        Shape blueSquare = new Square(new BlueColor());

        redCircle.draw();
        blueSquare.draw();
    }
}

适用场景

  • 需要在多个维度上扩展类时,例如形状和颜色。
  • 不希望类之间有紧耦合关系,想通过组合提高灵活性。
  • 避免继承体系膨胀的问题。

优缺点

  • 优点
    解耦:抽象和实现分离,便于独立变化。
    扩展性强:可以独立扩展抽象层或实现层。
    遵循开闭原则:新增功能时无需修改现有代码。
  • 缺点
    增加了系统的复杂性,尤其在简单场景下,可能显得"过度设计"。
相关推荐
草莓熊Lotso几秒前
《算法闯关指南:优选算法--二分查找》--19.x的平方根,20.搜索插入位置
java·开发语言·c++·算法
YJlio4 分钟前
Process Monitor 学习笔记(5.7):长时间运行追踪与日志文件体积的控制
java·笔记·学习
火白学安全5 分钟前
《Python红队攻防脚本零基础编写:入门篇(一)》
python·安全·web安全·网络安全·系统安全
失散137 分钟前
分布式专题——45 ElasticSearch基础数据管理详解
java·分布式·elasticsearch·架构
没有bug.的程序员7 分钟前
分布式监控体系:从指标采集到智能告警的完整之道
java·分布式·告警·监控体系·指标采集
想不明白的过度思考者24 分钟前
JavaEE初阶——TCP/IP协议栈:从原理到实战
java·网络·网络协议·tcp/ip·java-ee
梦想的初衷~35 分钟前
Python驱动的无人机多光谱-点云融合技术在生态三维建模与碳储量、生物量、LULC估算中的全流程实战
python·无人机·遥感·多光谱
一晌小贪欢43 分钟前
Python爬虫第3课:BeautifulSoup解析HTML与数据提取
爬虫·python·网络爬虫·beautifulsoup·python爬虫·python3·requests
好家伙VCC43 分钟前
**发散创新:渗透测试方法的深度探索与实践**随着网络安全形势日益严峻,渗透测试作为评估系统安全的
java·python·安全·web安全·系统安全
机器学习之心1 小时前
一个基于无干扰增量容量(IC)和差分电压(DV)分析的锂离子电池健康状态(SOH)与剩余寿命(RUL)预测的Python实现
python