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

概述

桥接模式 :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();
    }
}
复制代码
执行效果:
画圆
填充绿色
绘制三角形
填充绿色
相关推荐
文丑颜不良啊16 分钟前
LeetCode2441~2460题目解析
java·leetcode
阿屿1 小时前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能
灿飞1 小时前
Kotlin与Java虚拟机十一:类与属性:构造顺序、backing field 与显式 backing field
java·后端·kotlin
aiks_yuan1 小时前
40亿个QQ号 1G内存怎么去重:Java BitSet 装不下,long 数组位图 512MB 实测 46 秒(JDK 17)
java
cjz38991 小时前
规则树:把一百行if-else拆成一棵树
设计模式
文丑颜不良啊1 小时前
LeetCode2521~2540题目解析
java·leetcode
杨凯凡1 小时前
Spring Framework 7 HTTP Interface 实战:声明式 RestClient、超时与测试
java·spring·http
吴名氏.2 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
瑞雪兆丰年兮2 小时前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Rain的Java大神之路3 小时前
你背的Spring答案,全是5.x时代的:7.0.8源码一翻,80%的博客都过时了
java·后端·面试