Skip to content

桥接模式

字数: 0 字 时长: 0 分钟

简介

桥接模式(Bridge Pattern)核心思想是:将抽象和实现分离,使他们可以独立变化。它通过组合替代继承,避免在多重继承结构种出现类的指数级增长。

UML 类图

bridge.webp

  • 抽象类(Abstraction):定义高层接口,同时维护一个对实现接口的引用
  • 扩展抽象类(Refined Abstraction):在抽象部分基础上扩展抽象,增加新的功能
  • 实现接口(Implementor):定义实现接口,供抽象部分调用
  • 具体实现(ConcreteImplementor):实现实现接口,完成具体的业务逻辑

实现示例

比如我们要实现一个消息发送功能:

  • 要求支持邮件、微信等发送方式
  • 要求支持普通用户信息、VIP用户信息等信息发送

桥接模式可以发送方式和信息类型两条线分离开来,避免多种代码逻辑耦合在一起

java
// 1. 定义实现接口
interface MessageSender {
    void send(String message);
}

// 2. 具体实现
class EmailSender implements MessageSender {
    @Override
    public void send(String message) {
        System.out.println("邮件发送消息");
    }
}
class WeChatSender implements MessageSender {
    @Override
    public void send(String message) {
        System.out.println("微信发送消息");
    }
}

// 3. 定义抽象类
abstract class Message {
    protected MessageSender sender;
    public Message(MessageSender sender) {
        this.sender = sender;
    }
    public abstract void send(String content);
}

//4. 扩展抽象类
class NormalMessage extends Message {
    public NormalMessage(MessageSender sender) {
        super(sender);
    }
    @Override
    public void send(String content) {
        System.out.println("普通用户消息发送逻辑");
        sender.send(content);
    }
}
class VipMessage extends Message {
    public VipMessage(MessageSender sender) {
        super(sender);
    }
    @Override
    public void send(String content) {
        System.out.println("VIP用户消息发送逻辑");
        sender.send(content);
    }
}

// 5. 调用示例
public static void main(String[] args) {
    MessageSender emailSender = new EmailMessageSender();
    MessageSender wechatSender = new WeChatMessageSender();
    
    Message normalMessageWithEmail = new NormalMessage(emailSender);
    Message vipMessageWithWechat = new VipMessage(wechatSender);
    normalMessageWithEmail.send();
    vipMessageWithEmail.send();
}