前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >23种设计模式,桥接模式实战

23种设计模式,桥接模式实战

原创
作者头像
小马哥学JAVA
发布2024-04-06 12:51:28
1390
发布2024-04-06 12:51:28

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立变化。这种模式通过创建一个桥接实现接口,把抽象和实现放在两个不同的类层次中,使两者可以独立地改变。

概念

在桥接模式中,通常涉及到以下两个层次:

  • 抽象层(Abstraction):定义抽象类的接口,它持有一个对实现层对象的引用。
  • 实现层(Implementor):定义实现类的接口,这个接口不需要与抽象层的接口相同。事实上,两者可以完全不同,实现层提供基本的操作,而抽象层定义的是基于这些基本操作的较高层次的操作。

优点

  1. 分离抽象与实现:使抽象和实现可以独立扩展,不会影响到对方。
  2. 提高可扩展性:可以独立地扩展抽象层和实现层,而不是耦合在一起。
  3. 提高灵活性:分离的组件可以灵活地重新配置或被动态选择。
  4. 降低维护成本:抽象和实现的分离也有助于降低对系统的维护成本。

缺点

  1. 增加系统的复杂性:设计和编码的复杂性可能会增加,因为引入了更多的接口和类。
  2. 理解难度增加:需要对抽象和实现的分离有清晰的认识,对于初学者来说,理解桥接模式的使用场景可能需要一些时间。

Java代码示例

假设我们正在开发一个图形编辑器,需要支持多种不同的形状,并且每种形状可以有多种不同的绘制方式。这是一个使用桥接模式的典型场景。

首先,我们定义实现层接口DrawAPI,用于绘制形状:

java复制代码

代码语言:javascript
复制
public interface DrawAPI {
    void drawCircle(int radius, int x, int y);
}

然后,实现这个接口的具体类表示具体的绘制方法:

java复制代码

代码语言:javascript
复制
public class RedCircle implements DrawAPI {
    public void drawCircle(int radius, int x, int y) {
        System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", y:" + y + "]");
    }
}

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

接着,定义抽象层Shape,它持有一个DrawAPI的引用,用于画出不同的形状:

java复制代码

代码语言:javascript
复制
public abstract class Shape {
    protected DrawAPI drawAPI;

    protected Shape(DrawAPI drawAPI) {
        this.drawAPI = drawAPI;
    }

    public abstract void draw();
}

最后,具体的抽象层实现类可以用不同的绘制方法来画出相同的形状:

java复制代码

代码语言:javascript
复制
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);
    }
}

这样,Circle可以被配置为使用RedCircleGreenCircle中的任何一个来绘制,而且如果需要添加新的绘制方法,只需要扩展DrawAPI接口,不需要修改抽象层代码。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • 优点
  • 缺点
  • Java代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档