本文最后更新于 2025年7月25日 晚上
桥模式即将抽象部分与它的实现分离,使它们可以独立地变化
角色
- 抽象类 : 维护了Implementor即它的实现类
- 扩展抽象类 :扩展抽象部分的接口
- 实现接口: 定义实现部分的接口
- 具体实现: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"); } }
|
总结
桥接模式通过 将抽象与实现解耦 ,有效解决了系统中多维度扩展所带来的类爆炸问题。在实际应用中,如“消息发送”这种存在消息类型与发送方式两种变化维度的场景,桥接模式可以帮助我们灵活地组合不同的实现方式, 扩展性强、层次清晰、遵循开闭原则 。在系统设计中,当你发现一个类需要同时支持多个独立变化的方向,桥接模式是一个非常值得优先考虑的解决方案。