桥模式

本文最后更新于 2025年7月25日 晚上

桥模式即将抽象部分与它的实现分离,使它们可以独立地变化

角色

  1. 抽象类 : 维护了Implementor即它的实现类
  2. 扩展抽象类 :扩展抽象部分的接口
  3. 实现接口: 定义实现部分的接口
  4. 具体实现:Implementor 接口的具体实现

应用桥模式

以发送消息为例。当存在多种通知模式的时候,可以使用接口和抽象类来管理具体实现。在最终的流程中以基类组件业务流程,最终创建实现类完成通知-发送操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 定义消息格式的接口部分
public interface MessageImplementor {
void send(String toUser , String messages);
}

// 消息格式的实现类
public class WeixinMessage implements MessageImplementor{
@Override
public void send(String toUser, String message){
System.out.println("[微信消息]"+toUser+":"+message);
}
}

// 消息格式的实现类
public class SMSMessage implements MessageImplementor{
@Override
public void send(String toUser , String message){
System.out.println("[短信消息]"+toUser+":"+message);
}
}

// 定义消息发送的抽象类
public abstract class AbstractMessage{
protected MessageImplementor impl ;
public AbstractMessage(MessageImplementor impl){
this.impl = impl ;
}

public void send(String toUser,String message){
this.impl.send(toUser,message);
}
}

// 定义消息发送的实现类
public class CommonMessage extends AbstractMessage{
public CommonMessage(MessageImplementor impl){
super(impl);
}

@Override
public void send(String toUser, String message){
super.send(toUser,message);
}
}

// 定义消息发送的实现类
public class UrgencyMessage extends AbstractMessage{
public UrgencyMessage(MessageImplementor impl){
super(impl);
}
@Override
public void send(String toUser , String message){
message = "[加急]"+message;
super.send(toUser,message);
}
public Object watch(String messageId){
return "[watch]收到";
}
}

public class Test1{
public staic void main(String[] args){
MessageImplementor messageImplementor = new WeixinMessage();
AbstractMessage message = new CommonMessage(messageImplementor);
message.send("hello from WeChat");
}
}

public class Test2{
public staic void main(String[] args){
MessageImplementor messageImplementor = new SMSMessage();
AbstractMessage message = new UrgencyMessage(messageImplementor);
message.send("hello from SMS");
}
}

总结

桥接模式通过 将抽象与实现解耦 ,有效解决了系统中多维度扩展所带来的类爆炸问题。在实际应用中,如“消息发送”这种存在消息类型与发送方式两种变化维度的场景,桥接模式可以帮助我们灵活地组合不同的实现方式, 扩展性强、层次清晰、遵循开闭原则 。在系统设计中,当你发现一个类需要同时支持多个独立变化的方向,桥接模式是一个非常值得优先考虑的解决方案。


桥模式
http://gadoid.io/2025/07/25/桥模式/
作者
Codfish
发布于
2025年7月25日
许可协议