1. 模式应用到场景中
public abstract class AbstractMessage {
//持有一个实现部分的对象
protected MessageImplementor impl;
public AbstractMessage(MessageImplementor impl){
this.impl = impl;
}
public void sendMessage(String message,String toUser){
this.impl.send(message, toUser);
}
}
public class CommonMessage extends AbstractMessage{
public CommonMessage(MessageImplementor impl) {
super(impl);
}
public void sendMessage(String message, String toUser) {
//对于普通消息,什么都不干,直接调用父类的方法,把消息发送出去就可以了
super.sendMessage(message, toUser);
}
}
public class MessageEmail implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用Email的方式,发送消息'"+message+"'给"+toUser);
}
}
public interface MessageImplementor {
/**
* 发送消息
* @param message 要发送的消息内容
* @param toUser 把消息发送的目的人员
*/
public void send(String message,String toUser);
}
public class MessageMobile implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用手机短消息的方式,发送消息'"+message+"'给"+toUser);
}
}
public class MessageSMS implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用站内短消息的方式,发送消息'"+message+"'给"+toUser);
}
}
public class SpecialUrgencyMessage extends AbstractMessage{
public SpecialUrgencyMessage(MessageImplementor impl) {
super(impl);
}
public void hurry(String messageId) {
//执行催促的业务,发出催促的信息
}
public void sendMessage(String message, String toUser) {
message = "特急:"+message;
super.sendMessage(message, toUser);
//还需要增加一条待催促的信息
}
}
public class UrgencyMessage extends AbstractMessage{
public UrgencyMessage(MessageImplementor impl) {
super(impl);
}
public void sendMessage(String message, String toUser) {
message = "加急:"+message;
super.sendMessage(message, toUser);
}
/**
* 监控某消息的处理过程
* @param messageId 被监控的消息的编号
* @return 包含监控到的数据对象,这里示意一下,所以用了Object
*/
public Object watch(String messageId) {
//获取相应的数据,组织成监控的数据对象,然后返回
return null;
}
}
public static void main(String[] args) {
//创建具体的实现对象
MessageImplementor impl = new MessageSMS();
//创建一个普通消息对象
AbstractMessage m = new CommonMessage(impl);
m.sendMessage("请喝一杯茶", "小李");
//创建一个紧急消息对象
m = new UrgencyMessage(impl);
m.sendMessage("请喝一杯茶", "小李");
//创建一个特急消息对象
m = new SpecialUrgencyMessage(impl);
m.sendMessage("请喝一杯茶", "小李");
//把实现方式切换成手机短消息,然后再实现一遍
impl = new MessageMobile();
m = new CommonMessage(impl);
m.sendMessage("请喝一杯茶", "小李");
m = new UrgencyMessage(impl);
m.sendMessage("请喝一杯茶", "小李");
m = new SpecialUrgencyMessage(impl);
m.sendMessage("请喝一杯茶", "小李");
}
2. 总结
桥接模式的本质:分离抽象和实现,分离抽象部分和实现部分
- 只有把抽象部分和实现部分分离开了,才能够让它们独立地变化;
- 只有抽象部分和实现部分可以独立地变化,系统才会有更好的可扩展性和可维护性。
- 其他的好处:可以动态地切换实现、可以减少子类个数等。