2.2设计模式——Bridge 桥接模式(结构型)

意图

将抽象部分与其显示部分分离,使他们都可以独立地变化。

结构

其中:

  • Abstraction定义抽象类的接口,维护一个指向Implementer类型对象的指针。
  • RefinedAbstraction扩展由Abstraction定义的接口。
  • Implementor定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同,一般来说,Implementor接口仅提供基本操作,而Abstraction定义了基于这些基本操作的较高层次的操作。
  • ConcreteImplementor实现Implementor接口并定义他的具体实现

适用性

  • 不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如,这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
  • 累的抽象以及他的实现都有该可以通过生成子类的方法来加以扩充。这是Bridge模式使得开发者可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
  • 对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译,(C++)相对客户完全隐藏抽象的实现部分。
  • 许多类需要生成的层次结构。
  • 想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

代码示例

桥接设计模式是一种结构型设计模式,它将抽象部分与实现部分分离,从而使两者可以独立变化。

假设我们有一个 Shape 抽象类,它定义了形状的基本操作。我们还有两个实现类 Circle 和 Square,它们提供了具体形状的实现。

我们希望能够在不修改 Shape 抽象类的情况下向系统添加新的形状。

// 抽象形状类
abstract class Shape {

    protected DrawAPI drawAPI;

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

    public abstract void draw();
}

// 圆形类
class Circle extends Shape {

    public Circle(DrawAPI drawAPI) {
        super(drawAPI);
    }

    @Override
    public void draw() {
        drawAPI.drawCircle();
    }
}

// 正方形类
class Square extends Shape {

    public Square(DrawAPI drawAPI) {
        super(drawAPI);
    }

    @Override
    public void draw() {
        drawAPI.drawSquare();
    }
}

// 绘制 API 接口
interface DrawAPI {

    void drawCircle();
    void drawSquare();
}

// 红色绘制 API 实现
class RedDrawAPI implements DrawAPI {

    @Override
    public void drawCircle() {
        System.out.println("使用红色绘制圆形");
    }

    @Override
    public void drawSquare() {
        System.out.println("使用红色绘制正方形");
    }
}

// 绿色绘制 API 实现
class GreenDrawAPI implements DrawAPI {

    @Override
    public void drawCircle() {
        System.out.println("使用绿色绘制圆形");
    }

    @Override
    public void drawSquare() {
        System.out.println("使用绿色绘制正方形");
    }
}

// 客户端代码
public class Client {

    public static void main(String[] args) {
        DrawAPI redDrawAPI = new RedDrawAPI();
        DrawAPI greenDrawAPI = new GreenDrawAPI();

        Shape redCircle = new Circle(redDrawAPI);
        Shape greenSquare = new Square(greenDrawAPI);

        redCircle.draw();
        greenSquare.draw();
    }
}
  • Shape 是一个抽象类,定义了形状的基本操作。
  • Circle 和 Square 是实现类,它们提供了具体形状的实现。
  • DrawAPI 是一个接口,定义了绘制形状所需的接口。
  • RedDrawAPI 和 GreenDrawAPI 是 DrawAPI 接口的实现,它们提供了使用不同颜色的绘制功能。
  • 客户端代码通过将 Shape 对象与 DrawAPI 对象关联来创建不同的形状和颜色组合。

桥接模式将抽象部分(Shape)与实现部分(DrawAPI)分离,从而使两者可以独立变化。我们可以轻松地添加新的形状或绘制 API 实现,而无需修改其他部分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值