引入
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);
}
}