当前位置: 首页 > news >正文

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

概述

桥接模式Bridge Pattern: 是一种结构型设计模式。
旨在将抽象部分实现部分分离,使它们可以独立变化。
它通过组合代替继承,解决类爆炸问题,并提高系统的灵活性和可扩展性。

组成部分

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

一个背景案例

画图 : 画 不同形状的、不同颜色的 图形。
例如 : 三角形-红色的;三角形-绿色的;圆形-红色的;圆形-绿色的;
分析 : 把 形状定位为 抽象的部分,把 填充颜色定位为具体实现部分;画图形的时候,组合颜色一并填充。
当需要新增 形状 or 颜色 的时候,只需要新增一个类即可,在使用时可以自由组合。
实际上,此处的这个 Shap 抽象类,就相当于一个桥的作用
类图结构如下:

在这里插入图片描述

实现部分- Color

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

抽象部分-Shap

public abstract class Shap {
	// 聚合 Color  
    protected Color color;

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

    public abstract void draw();
}
public class ShapTriangle extends Shap{
    public ShapTriangle(Color color) {
        super(color);
    }

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

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

测试类

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();
    }
}
执行效果:
画圆
填充绿色
绘制三角形
填充绿色

相关文章:

  • GB28181视频平台LiveGBS在设置公网IP收流时,如何自定义修改收流端口区间
  • Docker Compose 部署 steamcmd 安装奈斯服务端
  • Kafka,Mq,Redis作为消息队列使用时的差异?|消息队列
  • 计算机视觉应用|自动驾驶的感知革命:多传感器融合架构的技术演进与落地实践
  • 从零开始的python学习(五)P71+P72+P73+P74
  • Redis6.2.6下载和安装
  • ①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
  • 广告营销反欺诈
  • 【Linux】38.网络基础(2.1)
  • K8S学习之基础二十一:k8s的持久化存储之emptyDir
  • 【AI深度学习网络】Transformer时代,RNN(循环神经网络)为何仍是时序建模的“秘密武器”?
  • 【开源】OpenAL、OpenCL、OpenCV 和 OpenGL
  • [machine learning] DP(Data Parallel) vs DDP(Distributed Data Parallel)
  • 25、C++中的多线程同步机制【中高频】
  • Redis 面试篇
  • Nuxt3 ssr build/dev时区分不同的环境
  • Unity 基础知识总结(持续更新中...)
  • golang从入门到做牛马:第七篇-Go语言常量-不可变的“守护者”
  • 数据清洗级可视化中,Pandasnumyp的主要作用
  • 02C#基本结构篇(D1_基本语法)
  • 没公司怎么做网站/数据分析师一般一个月多少钱
  • 南宁物流公司网站建设/上海app定制开发公司
  • 网站建设优化开发公司哪家好/app推广拉新
  • 大连网站代运营的公司有哪些/北京seo方法
  • 搜索引擎优化哪些方面/五年级上册优化设计答案
  • 昆明哪些做网站建设的公司/自己有域名怎么建网站