什么是桥接模式?
桥接模式就是把事物的两个方面(两个变化的维度)分开管理,让它们可以分别自由变化,然后通过一个“桥”把它们连接起来。
举个生活中的例子
想象一下你在买鞋子:
- 鞋子有不同的款式(比如运动鞋、皮鞋、凉鞋)
- 鞋子有不同的颜色(比如黑色、白色、红色)
如果你每一种款式都做每一种颜色,会有很多种组合,比如:
- 黑色运动鞋
- 白色运动鞋
- 黑色皮鞋
- 红色凉鞋
- ……
这样鞋子的种类就会变得特别多,管理起来很麻烦。
桥接模式的做法是:
- 把“款式”和“颜色”分开,分别设计
- 生产鞋子的时候,把某种款式和某种颜色组合起来
这样,不管以后增加新的款式还是颜色,都不会影响另一边,也不会导致组合数量爆炸。
用程序举例
比如你要发消息,有两种维度:
- 消息类型:普通消息、加急消息
- 发送方式:短信、邮件
如果不用桥接模式,你可能会写很多类:
普通短信、普通邮件、加急短信、加急邮件……
用桥接模式,你只需要:
- 把消息类型和发送方式分开
- 需要的时候组合在一起
代码会变成这样(伪代码):
// 发送方式接口
interface Sender {void send(String msg);
}// 两种发送方式
class SmsSender implements Sender { ... }
class EmailSender implements Sender { ... }// 消息类型抽象
abstract class Message {protected Sender sender;public Message(Sender sender) { this.sender = sender; }public abstract void send(String msg);
}// 两种消息类型
class NormalMessage extends Message { ... }
class UrgentMessage extends Message { ... }
这样你可以任意组合:
- 普通消息用短信发
- 加急消息用邮件发
- 普通消息用邮件发……
总结一句话
桥接模式就是把“事物的两个变化点”分开,分别设计,然后通过桥(组合)连接起来,方便自由扩展和组合,避免重复和类爆炸。