### Java桥接模式详解 #### 一、桥接模式简介 桥接模式(Bridge Pattern)是一种结构型设计模式,它的核心思想是将抽象与其实现分离,使它们都可以独立变化。这种模式允许用户在不影响其他部分的情况下改变某些部分的行为或表现形式。在Java中,桥接模式通常用于构建复杂系统,尤其是当需要支持多种实现方式时。 #### 二、应用场景 假设我们需要设计一个系统,该系统能够根据不同类型的消息和发送方式来发送提示消息。消息类型包括普通消息、加急消息和特急消息;发送方式则包括系统内短消息、手机短信和邮件。针对这些需求,我们可以考虑使用桥接模式来实现。 #### 三、不使用桥接模式的解决方案 我们来看一个简单的实现方案,即只实现普通消息并通过两种方式发送:系统内短消息和邮件。 ##### 1. 实现简化版本 - **定义消息接口** `Message`:此接口定义了一个发送消息的方法 `send`。 - **实现系统内短消息发送** `CommonMessageSMS`:实现了 `Message` 接口,使用系统内短消息发送普通消息。 - **实现邮件发送** `CommonMessageEmail`:同样实现了 `Message` 接口,但使用邮件发送普通消息。 示例代码如下: ```java public interface Message { void send(String message, String toUser); } public class CommonMessageSMS implements Message { public void send(String message, String toUser) { System.out.println("使用站内短消息的方式,发送消息'" + message + "'给" + toUser); } } public class CommonMessageEmail implements Message { public void send(String message, String toUser) { System.out.println("使用Email的方式,发送消息'" + message + "'给" + toUser); } } ``` ##### 2. 实现发送加急消息 接下来,我们为加急消息增加功能,并且保持发送方式不变,即仍然支持站内短消息和邮件。 - **定义加急消息接口** `UrgencyMessage`:继承自 `Message` 接口,新增了一个监控方法 `watch` 用于监控消息处理进度。 - **实现加急消息的站内短消息发送** `UrgencyMessageSMS`:实现 `UrgencyMessage` 接口,发送前在消息内容前加上“加急”标记,并提供了监控功能。 - **实现加急消息的邮件发送** `UrgencyMessageEmail`:同样实现了 `UrgencyMessage` 接口,并增加了监控功能。 示例代码如下: ```java public interface UrgencyMessage extends Message { Object watch(String messageId); } public class UrgencyMessageSMS implements UrgencyMessage { public void send(String message, String toUser) { message = "加急:" + message; System.out.println("使用站内短消息的方式,发送消息'" + message + "'给" + toUser); } public Object watch(String messageId) { // 监控实现代码 return null; } } public class UrgencyMessageEmail implements UrgencyMessage { public void send(String message, String toUser) { message = "加急:" + message; System.out.println("使用Email的方式,发送消息'" + message + "'给" + toUser); } public Object watch(String messageId) { // 监控实现代码 return null; } } ``` #### 四、使用桥接模式的解决方案 虽然上述实现可以满足当前的需求,但如果未来需要添加更多类型的消息或发送方式,这种方式就会变得非常复杂。这时,引入桥接模式可以更好地应对变化。 ##### 1. 分离抽象与实现 - **定义抽象类** `AbstractMessage`:该类包含了消息的基本属性和行为。 - **定义实现类接口** `IMessageSender`:定义了发送消息的具体方法。 - **定义实现类**:如 `SMSMessageSender` 和 `EmailMessageSender`,分别实现了 `IMessageSender` 接口,用于具体的发送方式。 ##### 2. 示例代码 ```java public abstract class AbstractMessage { protected IMessageSender sender; public AbstractMessage(IMessageSender sender) { this.sender = sender; } public abstract void send(String message, String toUser); } public interface IMessageSender { void sendMessage(String message, String toUser); } public class SMSMessageSender implements IMessageSender { public void sendMessage(String message, String toUser) { System.out.println("使用站内短消息的方式,发送消息'" + message + "'给" + toUser); } } public class EmailMessageSender implements IMessageSender { public void sendMessage(String message, String toUser) { System.out.println("使用Email的方式,发送消息'" + message + "'给" + toUser); } } public class CommonMessage extends AbstractMessage { public CommonMessage(IMessageSender sender) { super(sender); } @Override public void send(String message, String toUser) { sender.sendMessage(message, toUser); } } public class UrgencyMessage extends AbstractMessage { public UrgencyMessage(IMessageSender sender) { super(sender); } @Override public void send(String message, String toUser) { message = "加急:" + message; sender.sendMessage(message, toUser); } } ``` 通过上述桥接模式的设计,我们可以轻松地添加新的消息类型或者发送方式,而不需要修改现有的代码。例如,如果将来需要支持特急消息或者增加新的发送方式,只需要在相应的层次中进行扩展即可。这种设计模式极大地提高了代码的可维护性和灵活性。
剩余41页未读,继续阅读
- yangfan8310282012-06-28桥接模式讲的佷详细,例子很好,谢谢楼主
- lanmao1234562012-10-30讲的很详细,多谢多谢。。
- bianxiaoying112012-10-28桥接模式的例子很好
- 粉丝: 8
- 资源: 230
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- x64dbg-development-2022-09-07-14-52.zip
- 多彩吉安红色旅游网站-JAVA-基于springBoot多彩吉安红色旅游网站的设计与实现
- 本 repo 包含使用新 cv2 接口的 OpenCV-Python 库教程.zip
- 更新框架 (TUF) 的 Python 参考实现.zip
- Qos,GCC,pacing,Nack
- 章节1:Python入门视频
- 无需样板的 Python 类.zip
- ESP32 : 32-bit MCU & 2.4 GHz Wi-Fi & BT/BLE SoCs
- 博物馆文博资源库-JAVA-基于springBoot博物馆文博资源库系统设计与实现
- 旅游网站-JAVA-springboot+vue的桂林旅游网站系统设计与实现