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

概述

桥接模式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();
    }
}
复制代码
执行效果:
画圆
填充绿色
绘制三角形
填充绿色
相关推荐
letisgo57 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周7 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8447 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
暮雨哀尘7 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言
想要入门的程序猿8 小时前
回调函数学习
java·网络·学习
泡海椒8 小时前
动态代理核心原理:JQuick-Java接口规则自动生成机制解析
java·开发语言·python
步行cgn8 小时前
Spring 启动报错:BeanFactory not initialized 的原因与解决
java·python·spring
步行cgn8 小时前
Spring 报错:No bean class specified on bean definition 的原因与解决
java·后端·spring
zhangjw349 小时前
第47篇:Java综合实战:电商秒杀系统(高并发场景)
java·开发语言
土司大王9 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树