Java设计模式:桥接模式,干货总结

createh54周前 (03-23)技术教程10

桥接设计模式(Bridge Design Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。这种模式通过使用抽象层和实现层来实现解耦,从而提高系统的灵活性和可扩展性。

桥接设计模式的组成

桥接设计模式包含以下几个关键组件:

  1. Abstraction(抽象类):定义了客户端使用接口,维持一个指向实现类的引用。
  2. Implementor(实现类接口):定义了实现类的接口,但不实现它。
  3. ConcreteImplementor(具体实现类):实现了Implementor接口的具体类。
  4. RefinedAbstraction(扩展抽象类):扩展了Abstraction,添加了额外的功能和状态。

桥接设计模式的适用场景

  • 当一个类存在多种变化时,且这些变化与类的功能耦合。
  • 当希望对类的功能进行扩展,同时又不希望修改类本身时。

示例代码

假设我们有一个绘图程序,其中图形的绘制方式(如:实线、虚线)和颜色(如:红色、蓝色)是两个独立变化的维度。

// 实现类接口
interface DrawingAPI {
    void draw(String shape, int x, int y);
}

// 具体实现类
class RedPen implements DrawingAPI {
    @Override
    public void draw(String shape, int x, int y) {
        System.out.println("Drawing " + shape + " in red at (" + x + ", " + y + ")");
    }
}

class BluePen implements DrawingAPI {
    @Override
    public void draw(String shape, int x, int y) {
        System.out.println("Drawing " + shape + " in blue at (" + x + ", " + y + ")");
    }
}

// 抽象类
abstract class Shape {
    protected DrawingAPI drawingAPI; // 引用实现类接口

    public Shape(DrawingAPI drawingAPI) {
        this.drawingAPI = drawingAPI;
    }

    abstract void draw();
}

// 扩展抽象类
class Circle extends Shape {
    private int x, y;
    private int radius;

    public Circle(DrawingAPI drawingAPI, int x, int y, int radius) {
        super(drawingAPI);
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    @Override
    public void draw() {
        drawingAPI.draw("Circle", x, y);
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        DrawingAPI redPen = new RedPen();
        DrawingAPI bluePen = new BluePen();

        Shape circle = new Circle(redPen, 10, 20, 5);
        circle.draw();

        Shape square = new Circle(bluePen, 15, 25, 10);
        square.draw();
    }
}

桥接设计模式的优点

  • 解耦:将抽象部分和实现部分分离,使得它们可以独立地变化。
  • 扩展性:可以很容易地扩展新的实现类,而不需要修改抽象类。

桥接设计模式的缺点

  • 增加复杂性:引入了额外的类,可能会使得系统变得更加复杂。

结语

桥接设计模式通过将抽象部分和实现部分分离,提高了系统的灵活性和可扩展性。在实际开发中,合理运用桥接模式可以有效地应对多变的需求,使得系统更加易于维护和扩展。通过上述示例代码,我们可以看到如何实现这一模式,并理解其在图形绘制等场景中的应用。

好了,今天的内容就分享到这里。若这篇文章能给您带来些许帮助或启发,请不吝关注我的头条号,并给予点赞、留言和转发。您的每一次支持,都是我继续创作的最大动力!感谢您的陪伴,期待与您共同成长。

相关文章

「Java」绘图入门和机制,绘图方法演示(绘制坦克)

目录1.绘图入门(绘制一个圆)1.第一步//1.先定义一个Mypanel,继承JPanel,画图行就在面板上画。//Mypanel可以理解为一个画板//Graphics可以理解为一个画笔,提供了很多绘...

stable-diffusion.java, Java调用Stable Diffusion实现AI 画图

今天了解了一个新的项目,stable-diffusion.java, 这是一个Java 项目,通过底层调用stable-diffusion.cpp, 从而让Java 项目也能AI 画图, 好神奇!st...

java Graphics2D 画图

在Java中,当需要画一些特殊的形状时,比如说椭圆、矩形等,可以使用 Graphics2D 来绘图。一些API:g.drawLine(3,3,50,50);//画一条线段 g.drawRect(80...

有趣的EXCEL&vba作图

还记不记得之前有个日本老爷爷用EXCEL绘图,美轮美奂,可谓是心思巧妙。我是没有那样的艺术细胞,不过咱有自己的方式,用代码作图通过vba代码将指定的图片写入excel工作表中,可不是插入图片哦解题思...

游戏开发之旅-JavaScript绘制图形

本节是第四讲的第二十二小节,上一节课为大家介绍了Ajax技术,包括XmlHttpRequest对象和FetchAPI的基本用法,本节为大家继续介绍JavaScript绘制图形的方法(Canvas AP...

Python绘图Turtle库详解

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行...