设计模式-桥接模式01
一、桥接模式简介
桥接模式是一种结构型设计模式,它的核心目的是将抽象部分与实现部分分离,使它们都可以独立变化。通过引入桥接模式,可以避免多维度继承带来的类爆炸问题。
通俗理解:桥接模式就是把“两个变化的维度”分开管理,通过“桥”进行连接。
二、适用场景
- 当类的功能有多个维度变化(如平台和功能),并且每个维度都可能扩展时。
- 避免因为多维度扩展而导致的类爆炸(比如每个维度都用继承,会有大量子类)。
- 希望能够动态切换实现。
典型例子:
假如你要开发一个图形库,支持不同的图形(圆、方)和不同的显示方式(矢量、位图),如果直接继承,会导致每种图形和每种显示方式都要有一个类,类数量 = 图形数量 × 显示方式数量。而桥接模式可以将图形和显示方式分开实现,并通过桥接连接。
三、结构分析
桥接模式主要包含以下角色:
- 抽象类(Abstraction):定义抽象部分的接口,并引用实现部分的对象。
- 扩充抽象类(RefinedAbstraction):扩展抽象接口。
- 实现类接口(Implementor):定义实现部分的接口。
- 具体实现类(ConcreteImplementor):实现实现类接口的具体类。
UML类图:
Abstraction||-------------------| |
RefinedAbstraction Implementor||ConcreteImplementor
四、代码实例
假设我们有不同类型的消息(加急、普通),以及不同的消息发送方式(短信、邮件)。
1. 实现部分接口
// Implementor
public interface MessageSender {void send(String message);
}// ConcreteImplementor
public class SmsSender implements MessageSender {public void send(String message) {System.out.println("发送短信: " + message);}
}public class EmailSender implements MessageSender {public void send(String message) {System.out.println("发送邮件: " + message);}
}
2. 抽象部分
// Abstraction
public abstract class Message {protected MessageSender sender;public Message(MessageSender sender) {this.sender = sender;}public abstract void sendMessage(String message);
}// RefinedAbstraction
public class UrgentMessage extends Message {public UrgentMessage(MessageSender sender) {super(sender);}public void sendMessage(String message) {sender.send("[加急] " + message);}
}public class NormalMessage extends Message {public NormalMessage(MessageSender sender) {super(sender);}public void sendMessage(String message) {sender.send("[普通] " + message);}
}
3. 客户端调用
public class Client {public static void main(String[] args) {MessageSender sms = new SmsSender();MessageSender email = new EmailSender();Message urgentSms = new UrgentMessage(sms);Message normalEmail = new NormalMessage(email);urgentSms.sendMessage("系统故障,请速处理!");normalEmail.sendMessage("每周例会通知。");}
}
输出结果:
发送短信: [加急] 系统故障,请速处理!
发送邮件: [普通] 每周例会通知。
五、优缺点
优点
- 分离抽象和实现,各自可以独立扩展,符合开闭原则。
- 降低类的数量,避免多维度子类爆炸。
- 动态组合实现,灵活性高。
缺点
- 增加了系统设计的复杂度,多了一个抽象层。
六、总结
桥接模式适用于多维度变化的场景,是一种典型的“组合优于继承”的设计思想。它让抽象和实现可以独立扩展,是大型系统架构中常用的模式之一。