引入
JDBC是以統一方式訪問數據庫的API.是一種退化的橋接模式
它提供了獨立於平臺的數據庫訪問,也就是說,有了JDBC API,我們就不必爲訪問Oracle數據庫專門寫一個程序,爲訪問Sybase數據庫又專門寫一個程序等等,只需要用JDBC API寫一個程序就夠了,它可以向相應數據庫發送SQL調用.JDBC是Java應用程序與各種不同數據庫之間進行對話的方法的機制.
橋接模式原理
系統有多維角度分類時,而每一種分類又有可能變化,考慮使用橋接模式 橋接的目的是分離抽象與實現,使抽象和實現可以獨立變化。
橋接模式的優點
(1)實現了抽象和實現部分的分離
橋接模式分離了抽象部分和實現部分,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,分別定義接口,這有助於系統進行分層設計,從而產生更好的結構化系統。對於系統的高層部分,只需要知道抽象部分和實現部分的接口就可以了。
(2)更好的可擴展性
由於橋接模式把抽象部分和實現部分分離了,從而分別定義接口,這就使得抽象部分和實現部分可以分別獨立擴展,而不會相互影響,大大的提供了系統的可擴展性。
(3)可動態的切換實現
由於橋接模式實現了抽象和實現的分離,所以在實現橋接模式時,就可以實現動態的選擇和使用具體的實現。
(4)實現細節對客戶端透明,可以對用戶隱藏實現細節。
橋接模式的缺點
(1)橋接模式的引入增加了系統的理解和設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計和編程。
(2)橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍有一定的侷限性。
使用橋樑模式的場景
不用橋接模式的寫法
package com.lzhsite.technology.designPattern.bridgems.OAMessage;
public interface Message
{
public void send(String message, String toUser);
}
package com.lzhsite.technology.designPattern.bridgems.OAMessage;
public interface UrgencyMessage extends Message
{
public Object monitor(String messageId);
}
package com.lzhsite.technology.designPattern.bridgems.OAMessage;
public class UrgencyMessageSMS implements UrgencyMessage
{
public Object monitor(String messageId)
{
return null;
}
public void send(String message, String toUser)
{
message = "加急:" + message;
System.out.println("使用系統內短消息的方法,發送消息 '" + message + "' 給 " + toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessage;
public class UrgencyMessageEmail implements UrgencyMessage
{
public Object monitor(String messageId)
{
return null;
}
public void send(String message, String toUser)
{
message = "加急:" + message;
System.out.println("使用郵件短消息的方法,發送消息 '" + message + "' 給 " + toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessage;
public class CommonMessageSMS implements Message
{
public void send(String message, String toUser)
{
System.out.println("使用系統內短消息的方法,發送消息 '" + message + "' 給 " + toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessage;
public class CommonMessgaeEmail implements Message
{
public void send(String message, String toUser)
{
System.out.println("使用郵件短消息的方法,發送消息 '" + message + "' 給 " + toUser);
}
}
用橋接模式的寫法:
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public class ClientForOAMessageBridge
{
public static void main(String[] args)
{
MessageImplementor messageImplementor = new MessageSMS();
AbstractMessage message = new CommonMessage(messageImplementor);
message.sendMessage("請喝杯茶", "小李");
message = new UrgencyMessage(messageImplementor);
message.sendMessage("請喝杯茶", "小李");
message = new SpecialUrgencyMessage(messageImplementor);
message.sendMessage("請喝杯茶", "小李");
messageImplementor = new MessageMobile();
message = new CommonMessage(messageImplementor);
message.sendMessage("請喝杯茶", "小李");
message = new UrgencyMessage(messageImplementor);
message.sendMessage("請喝杯茶", "小李");
message = new SpecialUrgencyMessage(messageImplementor);
message.sendMessage("請喝杯茶", "小李");
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public abstract class AbstractMessage
{
protected MessageImplementor impl;
protected AbstractMessage(MessageImplementor impl)
{
this.impl = impl;
}
public void sendMessage(String message, String toUser)
{
this.impl.send(message, toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public class SpecialUrgencyMessage extends AbstractMessage
{
protected SpecialUrgencyMessage(MessageImplementor impl)
{
super(impl);
}
public void hurry(String messageId)
{
}
public void sendMessage(String message, String toUser)
{
message = "特急:" + message;
super.sendMessage(message, toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public class CommonMessage extends AbstractMessage
{
protected CommonMessage(MessageImplementor impl)
{
super(impl);
}
public void sendMessage(String message, String toUser)
{
super.sendMessage(message, toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public interface MessageImplementor
{
public void send(String message, String toUser);
}
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public class MessageMobile implements MessageImplementor
{
public void send(String message, String toUser)
{
System.out.println("使用手機短消息的方法,發送消息 '" + message + "' 給 " + toUser);
}
}
package com.lzhsite.technology.designPattern.bridgems.OAMessgaeBridge;
public class MessageSMS implements MessageImplementor
{
public void send(String message, String toUser)
{
System.out.println("使用系統內短消息的方法,發送消息 '" + message + "' 給 " + toUser);
}
}