java设计模式(九)桥接模式(Bridge Pattern)

1、模式介绍:

桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立变化。桥接模式通过提供抽象类和实现类之间的桥接结构,可以更容易地进行系统扩展。

2、应用场景:

多维度变化:当一个类存在多个独立变化的维度时,使用桥接模式可以避免类爆炸式增长。例如,图形界面系统中,可以将不同操作系统(如Windows、Mac)与不同界面元素(如按钮、文本框)分离开来。
抽象和实现分离:希望在抽象和实现之间建立一个稳定的连接,但又不希望两者彼此紧密耦合。桥接模式可以使它们独立变化、互不影响。

3、优点:

分离抽象和实现:桥接模式通过将抽象部分与实现部分分离,使得它们可以独立变化。
更好的扩展能力:可以动态地组合和扩展抽象部分和实现部分,而不需要修改已有的代码。
隐藏实现细节:桥接模式将实现细节从客户端代码中隐藏,使得代码更加清晰。

4、缺点:

增加复杂度:桥接模式会增加系统的理解和设计难度,需要正确地识别抽象和实现的分离点。
可能导致类的数量增加:如果桥接模式被过度使用,可能会导致系统中类的数量急剧增加。

5、代码实现:

/**
 * 实现部分接口
 *
 * @author FM_南风
 * @date 2024/7/2 13:33
 */
public interface DrawingAPI {
    void drawCircle(int x, int y, int radius);
}

/**
 * 实现类1
 *
 * @author FM_南风
 * @date 2024/7/2 13:33
 */
public class DrawingAPI1 implements DrawingAPI{
    @Override
    public void drawCircle(int x, int y, int radius) {
        System.out.printf("API1.画圆 %d:%d radius %d\n", x, y, radius);
    }
}

/**
 * 实现类2
 *
 * @author FM_南风
 * @date 2024/7/2 13:34
 */
public class DrawingAPI2 implements DrawingAPI{
    @Override
    public void drawCircle(int x, int y, int radius) {
        System.out.printf("API2.画圆 %d:%d radius %d\n", x, y, radius);
    }
}


/**
 * 抽象绘画类
 *
 * @author FM_南风
 * @date 2024/7/2 13:36
 */
abstract class Drawing {
    protected DrawingAPI drawingAPI;

    protected Drawing(DrawingAPI drawingAPI) {
        this.drawingAPI = drawingAPI;
    }

    public abstract void draw(); // 抽象方法
}

/**
 * 绘画实体类
 *
 * @author FM_南风
 * @date 2024/7/2 13:37
 */
public class DrawingClass extends Drawing{
    private int x, y, radius;

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

    @Override
    public void draw() {
        drawingAPI.drawCircle(x, y, radius);
    }
}

/**
 * 应用
 *
 * @author FM_南风
 * @date 2024/7/2 13:38
 */
public class BridgeClient {
    public static void main(String[] args) {
        Drawing drawing1 =  new DrawingClass(100, 100, 10, new DrawingAPI1());
        Drawing drawing2 = new DrawingClass(200, 200, 20, new DrawingAPI2());
        drawing1.draw();
        drawing2.draw();
    }
}

6、结果展示:

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值