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

概述

桥接模式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();
    }
}
执行效果:
画圆
填充绿色
绘制三角形
填充绿色
相关推荐
Seven979 分钟前
【设计模式】使用中介者模式实现松耦合设计
java·后端·设计模式
Seven9715 分钟前
【设计模式】探索状态模式在现代软件开发中的应用
java·后端·设计模式
Seven9716 分钟前
【设计模式】从事件驱动到即时更新:掌握观察者模式的核心技巧
java·后端·设计模式
Double Point20 分钟前
Java中LinkedBlockingQueue在异步处理Kafka数据中的应用
java·kafka·linq
andrew_121944 分钟前
暑期第一面oωo, TME一面面经
java·后端·sql·mysql·面试
howard20051 小时前
Java键盘输入数据
java·键盘输入数据
Seven971 小时前
【设计模式】责任链模式教你如何优雅地分发任务
java·后端·设计模式
郑州吴彦祖7721 小时前
《深入解析Java synchronized死锁:从可重入锁到哲学家就餐问题》
java·线程·synchronized
Seven971 小时前
【设计模式】命令模式助力快速添加新命令而不影响现有代码
java·后端·设计模式