桥接模式
字数: 0 字 时长: 0 分钟
简介
桥接模式(Bridge Pattern)核心思想是:将抽象和实现分离,使他们可以独立变化。它通过组合替代继承,避免在多重继承结构种出现类的指数级增长。
UML 类图
- 抽象类(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();
}