橋接模式又叫做橋樑模式、接口模式或柄體模式,指將抽象部分與具體實現部分分離,使它們均可以獨立的變化,屬於結構性模式。函數
橋接模式的主要目的是經過組合的方式創建兩個類之間的聯繫,而不是繼承,但又類是多重繼承方案。可是多重繼承方案每每違背了類測試
的單一職責原則,其複用性比較差,橋接模式是比多重繼承方案更好的替代方案。橋接模式的核心在於把抽象與實現解耦。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個角色.