设计模式-结构型模式-桥接模式

概述

桥接模式Bridge Pattern : 是一种结构型设计模式。

旨在将抽象部分实现部分分离,使它们可以独立变化。

它通过组合代替继承,解决类爆炸问题,并提高系统的灵活性和可扩展性。

组成部分

【抽象部分】(Abstraction) :定义高层控制逻辑,并包含一个对实现部分的引用。
扩展抽象部分(Refined Abstraction) :对抽象部分的扩展,提供更多控制逻辑。
【实现部分】(Implementor) :定义底层操作的接口,供抽象部分调用。
具体实现部分(Concrete Implementor):实现实现部分的接口,提供具体操作。

一个背景案例

画图 : 画 不同形状的、不同颜色的 图形。

例如 : 三角形-红色的;三角形-绿色的;圆形-红色的;圆形-绿色的;

分析 : 把 形状定位为 抽象的部分,把 填充颜色定位为具体实现部分;画图形的时候,组合颜色一并填充。
当需要新增 形状 or 颜色 的时候,只需要新增一个类即可,在使用时可以自由组合。

实际上,此处的这个 Shap 抽象类,就相当于一个桥的作用

类图结构如下:

实现部分- Color

java 复制代码
public interface Color {
    void fillColor();
}
java 复制代码
public class ColorRed implements Color{
    @Override
    public void fillColor() {
        System.out.println("填充红色");
    }
}
java 复制代码
public class ColorGreen implements Color{
    @Override
    public void fillColor() {
        System.out.println("填充绿色");
    }
}

抽象部分-Shap

java 复制代码
public abstract class Shap {
	// 聚合 Color  
    protected Color color;

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

    public abstract void draw();
}
java 复制代码
public class ShapTriangle extends Shap{
    public ShapTriangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制三角形");
        color.fillColor();
    }
}
java 复制代码
public class ShapCircle extends Shap{
    public ShapCircle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("画圆");
        color.fillColor();
    }
}

测试类

java 复制代码
public class Test {
    public static void main(String[] args) {
        // 一个颜色的实现对象
        Color colorGreen = new ColorGreen();

        // 绘制不同的形状,组合上对应的颜色对象
        Shap shapCircle = new ShapCircle(colorGreen);
        shapCircle.draw();

        Shap shapTriangle = new ShapTriangle(colorGreen);
        shapTriangle.draw();
    }
}
复制代码
执行效果:
画圆
填充绿色
绘制三角形
填充绿色
相关推荐
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川1 天前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo1 天前
查看 Tomcat 的堆内存参数
java·tomcat
那个失眠的夜1 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis