1. 设计模式之桥接模式:两个代码组件之间面向接口桥接调用

1.1. 介绍

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

桥接模式,几乎不需要特意去运用,java之中,无处不桥接,几乎所有的编程,都是面向接口去编程的

应用场景

  1. 跨平台开发:如UI组件与不同渲染引擎(OpenGL/Vulkan/Metal)解耦。

  2. 数据库驱动切换:JDBC驱动通过桥接模式连接不同数据库(MySQL/Oracle)。

  3. 设备控制:遥控器抽象与具体设备(电视/音响)独立扩展。

  4. 消息通知系统:消息类型(短信/邮件)与发送渠道(腾讯云/阿里云)解耦。

优缺点及建议

优点
1.抽象与实现分离:提高了系统的灵活性和可维护性。
2.扩展能力强:可以独立地扩展抽象和实现。
3.实现细节透明:用户不需要了解实现细节。

缺点
1.理解与设计难度:桥接模式增加了系统的理解与设计难度。
2.聚合关联:要求开发者在抽象层进行设计与编程。

使用建议
1.当系统需要在抽象化角色和具体化角色之间增加灵活性时,考虑使用桥接模式。
2.对于不希望使用继承或因多层次继承导致类数量急剧增加的系统,桥接模式特别适用。
3.当一个类存在两个独立变化的维度,且这两个维度都需要扩展时,使用桥接模式。

注意事项
1.桥接模式适用于两个独立变化的维度,确保它们可以独立地扩展和变化。

1.2. 实现及相关代码

假设有一个业务,需要调用另一个不相关的业务组件。(通过桥接方式,通过接口作为桥梁去调用)

1.2.1. 相关代码

接口及数据对象

public interface Implementor {
    void execute();
}

public static class ConcreteImplementor implements Implementor {
    public void execute() {
        System.out.println("执行了功能逻辑");
    }
}

public static abstract class Abstraction {
    protected Implementor implementor;

    public Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }

    public abstract void execute();
}

public static class RefinedAbstraction extends Abstraction {
    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }

    @Override
    public void execute() {
        implementor.execute();
    }
}

调用方法

public static void main(String[] args) {
    Implementor implementor = new ConcreteImplementor();
    // 传入组件
    Abstraction abstraction = new RefinedAbstraction(implementor);
    // 通过接口建立桥梁,调用接口来调用对应的组件
    abstraction.execute();
}

results matching ""

    No results matching ""