桥接模式又叫做桥梁模式、接口模式或柄体模式,指将抽象部分与具体实现部分分离,使它们均可以独立的变化,属于结构性模式。函数
桥接模式的主要目的是经过组合的方式创建两个类之间的联系,而不是继承,但又类是多重继承方案。可是多重继承方案每每违背了类测试
的单一职责原则,其复用性比较差,桥接模式是比多重继承方案更好的替代方案。桥接模式的核心在于把抽象与实现解耦。this
具给例子,咱们在平时办公得时候常常经过邮件消息、短信消息、或者系统内消息与同时进行沟通。消息又会有紧急程度之分,分为spa
普通消息、加急消息和特急消息。显然,整个消息系统能够划分为两个维度,下面咱们来看看经过桥接模式如何解决这个问题,先建立一个设计
IMessage接口担任桥接的角色类。code
public interface IMessage { //发送消息的内容和接收人 void send(String message,String toUser); }
建立邮件消息实现类EmailMessage类。blog
public class EmailMessage implements IMessage { public void send(String message, String toUser) { System.out.println("使用邮件消息发送" + message + "给" + toUser); } }
建立短线消息实现类SmsMessage类。继承
public class SmsMessage implements IMessage { public void send(String message, String toUser) { System.out.println("使用短信消息发送" + message + "给" + toUser); } }
建立桥接抽象角色AbastractMessage类。接口
public abstract class AbastractMessage { private IMessage message; public AbastractMessage(IMessage message) { this.message = message; } void sendMessage(String message,String toUser){ this.message.send(message,toUser); } }
建立具体实现普通消息NomalMessage类。ast
public class NomalMessage extends AbastractMessage {
public NomalMessage(IMessage message) {
super(message);
}
void sendMessage(String message, String toUser){
message = "【普通】" + message;
super.sendMessage(message,toUser);
}
}
建立具体实现加急消息UrgencyMessage类。
public class UrgencyMessage extends AbastractMessage { public UrgencyMessage(IMessage message) { super(message); } void sendMessage(String message, String toUser){ message = "【加急】" + message; super.sendMessage(message,toUser); } public Object watch(String messageId){ return null; } }
测试代码。
public class Test { public static void main(String[] args) { IMessage message = new SmsMessage(); AbastractMessage abastractMessage = new NomalMessage(message); abastractMessage.sendMessage("加班申请","王总"); message = new EmailMessage(); abastractMessage = new UrgencyMessage(message); abastractMessage.sendMessage("加班申请","王总"); } }
测试结果以下:
来看看对应的UML类图:
由上图能够看到,桥接模式主要包含4个角色.