设计模式详解-桥接模式

类型:结构型模式

实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。

意图:将抽象部分与实现部分分离,使它们都可以独立的变化。

主要解决:类变化频繁时用继承可能会出现的类爆炸问题。

如何解决:减少类的耦合关系,让类独立变化。

应用实例: 汽车制造,抽象部分可以是车辆的基本属性和功能,而实现部分可以是具体型号的引擎,通过桥接模式,我们可以在不同型号的汽车上组合不同类型的引擎

优点: 1、优秀的解耦性 2、优秀的扩展性

缺点:会提高系统的设计与认知难度

使用场景:一个类存在多个独立变化的维度

关键角色

  • 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
  • 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
  • 实现(Implementor):定义实现接口,提供基本操作的接口。
  • 具体实现(Concrete Implementor):实现实现接口的具体类。

实现

java 复制代码
步骤1:
首先,我们定义了一个接口 DrawAPI,其中包含了绘制圆形的方法 drawCircle。

public interface DrawAPI {
 public void drawCircle(int radius, int x, int y);
}


步骤 2:
然后,我们创建了两个实现了 DrawAPI 接口的具体桥接实现类:RedCircle 和 GreenCircle。这两个类分别用于绘制红色和绿色的圆形。

public class RedCircle implements DrawAPI {
 @Override
 public void drawCircle(int radius, int x, int y) {
     System.out.println("Drawing Circle[ color: red, radius: "
                + radius +", x: " +x+", "+ y +"]");
    }
}

public class GreenCircle implements DrawAPI {
    @Override
    public void drawCircle(int radius, int x, int y) {
        System.out.println("Drawing Circle[ color: green, radius: "
                + radius +", x: " +x+", "+ y +"]");
    }
}


步骤 3
我们创建了一个抽象类 Shape,其中包含一个成员变量 drawAPI,它的类型是 DrawAPI 接口。这个抽象类还有一个抽象方法 draw()。

public abstract class Shape {
    protected DrawAPI drawAPI;
    protected Shape(DrawAPI drawAPI){
        this.drawAPI = drawAPI;
    }
    public abstract void draw();
}


步骤 4
最后,我们创建了一个实体类 Circle,它继承了 Shape 抽象类。Circle 类有自己的属性(x、y、radius)和一个带有参数的构造函数。在 draw() 方法中,它调用了 drawAPI 的 drawCircle 方法来绘制圆形。

public class Circle extends Shape {
    private int x, y, radius;

    public Circle(int x, int y, int radius, DrawAPI drawAPI) {
        super(drawAPI);
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
    public void draw() {
        drawAPI.drawCircle(radius,x,y);
    }
}
步骤 5
在 BridgePatternDemo 类的 main 方法中,我们创建了一个红色的圆形和一个绿色的圆形,并通过调用 draw() 方法来绘制它们。这里的关键点是,我们可以通过传入不同的颜色类(即 RedCircle 和 GreenCircle)来实现不同颜色的圆形绘制,而无需修改 Shape 和 Circle 类的代码。

public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape redCircle = new Circle(100,100, 10, new RedCircle());
        Shape greenCircle = new Circle(100,100, 10, new GreenCircle());

        redCircle.draw();
        greenCircle.draw();
    }
}

综上所述,桥接模式的作用是将抽象部分和实现部分解耦,使它们可以独立地变化。在这个例子中,我们通过桥接模式实现了不同颜色圆形的绘制,而且可以很方便地添加更多的颜色选项,同时保持代码的灵活性和可扩展性。

相关推荐
Boilermaker19925 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维5 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_996 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子6 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34166 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
xiaolyuh1237 小时前
Spring 框架 核心架构设计 深度详解
spring·设计模式·spring 设计模式
wszy18097 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18097 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假8 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端