定义
将抽象部分与实现部分分离,使它们都可以独立的变化。
举个栗子–发消息(只讨论emil、手机短信、普通消息、加息消息四种组合)
直接上代码
/**
* 消息接口
*/
public interface MessageInterFace {
public void send(String msg, String toUser);
}
/**
* email发消息
*/
public class MessageEmail implements MessageInterFace {
@Override
public void send(String msg, String toUser) {
System.out.println("使用"+""+"email--"+"发送信息:"+msg+"--给"+"--"+toUser);
}
}
/**
* phone发消息
*/
public class MessagePhone implements MessageInterFace{
@Override
public void send(String msg, String toUser) {
System.out.println("使用"+""+"手机短信--"+"发送信息:"+msg+"--给"+"--"+toUser);
}
}
/**
* 抽象消息对象
*/
public class AbstractMessage {
private MessageInterFace messageInterFace;
public AbstractMessage(MessageInterFace messageInterFace) {
this.messageInterFace = messageInterFace;
}
public void send(String msg, String toUser) {
messageInterFace.send(msg, toUser);
}
}
/**
* 普通消息--不做处理
*/
public class MessageCommon extends AbstractMessage {
public MessageCommon(MessageInterFace messageInterFace) {
super(messageInterFace);
}
@Override
public void send(String msg, String toUser) {
msg="(普通消息)"+msg;
super.send(msg, toUser);
}
}
/**
* 紧急消息
*/
public class MessageUrgent extends AbstractMessage {
public MessageUrgent(MessageInterFace messageInterFace) {
super(messageInterFace);
}
@Override
public void send(String msg, String toUser) {
msg="(加急)"+msg;
super.send(msg, toUser);
}
}
测试
@Test
void bridgeTest(){
//普通短信消息
MessageCommon messageCommonPhone = new MessageCommon(new MessagePhone());
messageCommonPhone.send("干什么呢","喜洋洋");
//普通email信息
MessageCommon messageCommonEmail = new MessageCommon(new MessageEmail());
messageCommonEmail.send("干什么呢","喜洋洋");
//加急短信消息
MessageUrgent messageUrgentPhone = new MessageUrgent(new MessagePhone());
messageUrgentPhone.send("干什么呢","喜洋洋");
//加急email消息
MessageUrgent messageUrgentEmail = new MessageUrgent(new MessageEmail());
messageUrgentEmail.send("干什么呢","喜洋洋");
}
使用手机短信--发送信息:(普通消息)干什么呢--给--喜洋洋
使用email--发送信息:(普通消息)干什么呢--给--喜洋洋
使用手机短信--发送信息:(加急)干什么呢--给--喜洋洋
使用email--发送信息:(加急)干什么呢--给--喜洋洋
小结
1.本案例的桥接点在抽象类中直接持有信息接口的实现,通过消息类型与发送方式的组合实现桥接模式。
2.对于两个独立变化的维度(描述/区分对象的维度),使用桥接模式再适合不过了。
3.本质:分离抽象与实现