Java实现桥接模式:解耦消息发送的类型与方式

5星 · 超过95%的资源 需积分: 9 9 下载量 139 浏览量 更新于2024-07-28 收藏 489KB PDF 举报
"Java桥接模式的实现与应用" 桥接模式是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在Java中,这种模式通常用于减少类的数量并提高代码的可扩展性。在给定的例子中,桥接模式被用来解决发送提示消息的场景,其中消息类型和发送方式是可独立变化的两个维度。 1. 场景问题分析 发送提示消息的业务需求中,消息类型分为普通、加急和特急,每种类型可能有不同的处理逻辑。同时,发送方式包括系统内短消息、手机短信和电子邮件等。如果不使用设计模式,可能会导致大量的条件分支或类继承层次过深,难以维护和扩展。 1.1 不用模式的解决方案 一个简单的解决方法是首先实现普通消息的系统内短消息和邮件发送。为此,定义一个`Message`接口,包含发送消息的基本行为,然后创建两个实现类,分别对应系统内短消息和邮件的发送。这提供了一个初步的解耦,但随着消息类型和发送方式的增加,类的数量将快速膨胀。 ```java // 消息的统一接口 public interface Message { void send(String message, String toUser); } // 站内短消息实现 public class CommonMessageSMS implements Message { @Override public void send(String message, String toUser) { System.out.println("使用站内短消息的方式,发送消息'" + message + "'给" + toUser); } } // 邮件实现 public class EmailMessage implements Message { @Override public void send(String message, String toUser) { System.out.println("使用电子邮件的方式,发送消息'" + message + "'给" + toUser); } } ``` 1.2 桥接模式的应用 为了更好地应对未来的需求变化,可以引入桥接模式。首先定义一个`MessageType`接口,表示消息的类型,并创建其实现类,如`OrdinaryMessage`、`UrgentMessage`和`EmergencyMessage`。接着,创建一个`MessageSender`抽象类,它持有`Message`接口的引用,并实现发送消息的行为。具体的消息发送者(如`SMSMessageSender`和`EmailMessageSender`)继承`MessageSender`,并重写发送消息的方法,利用`Message`接口来实现实际的发送。 ```java // 消息类型的接口 public interface MessageType { void send(Message message, String toUser); } // 普通消息类型 public class OrdinaryMessage implements MessageType { @Override public void send(Message message, String toUser) { // 具体的处理逻辑 message.send(message, toUser); } } // 消息发送者的抽象类 public abstract class MessageSender { protected Message message; public MessageSender(Message message) { this.message = message; } abstract void sendMessage(String toUser); } // 系统内短消息发送者 public class SMSMessageSender extends MessageSender { public SMSMessageSender(Message message) { super(message); } @Override void sendMessage(String toUser) { System.out.println("使用站内短消息的方式,发送消息'" + message + "'给" + toUser); } } // 邮件发送者 public class EmailMessageSender extends MessageSender { public EmailMessageSender(Message message) { super(message); } @Override void sendMessage(String toUser) { System.out.println("使用电子邮件的方式,发送消息'" + message + "'给" + toUser); } } ``` 现在,可以通过组合不同类型的`MessageType`和`MessageSender`来创建所需的特定消息发送策略,例如发送加急的系统内短消息,只需实例化`UrgentMessage`和`SMSMessageSender`,并将它们组合在一起。 通过桥接模式,我们可以将消息类型和发送方式的实现分离,使得两者可以独立扩展,减少了类的数量,提高了代码的可读性和可维护性。此外,如果需要添加新的消息类型或发送方式,只需要扩展相应的接口实现,而不需要修改现有的代码结构。
2008-07-18 上传