无场景不设计,简单说一个场景来切入我们今天的正题。【桥接模式】
如图:

针对图上的不同款式、不同品牌的手机实现一个操作。传统方式如何去用代码实现
先看UML类图:

针对上图所示:传统方案的解决办法是有一定的问题的
扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品 牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这 样增加了代码维护成本.
既然面对上述传统解决方案是有弊端所在那我们如何去解决呢?现在就可以用到了本次的主题【桥接模式】
桥接模式
基本介绍
桥接模式是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变 是一种结构型设计模式 Bridge模式是基于类的最小设计原则,通过使用封装,聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(abstract)和行为特点(Implementation)分离出来,从而可以保证各个部分的独立性和功能扩展性
桥接模式UML类图:

说明
关于手机案例的UML类图:

代码案例:
//接口
public interface Brand {
void open();
void close();
void call();
}
public class XiaoMi implements Brand {
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println(" 小米手机开机 ");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println(" 小米手机关机 ");
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println(" 小米手机打电话 ");
}
}
public abstract class Phone {
//组合品牌
private Brand brand;
//构造器
public Phone(Brand brand) {
super();
this.brand = brand;
}
protected void open() {
this.brand.open();
}
protected void close() {
brand.close();
}
protected void call() {
brand.call();
}
}
//折叠式手机类,继承 抽象类 Phone
public class FoldedPhone extends Phone {
//构造器
public FoldedPhone(Brand brand) {
super(brand);
}
public void open() {
super.open();
System.out.println(" 折叠样式手机 ");
}
public void close() {
super.close();
System.out.println(" 折叠样式手机 ");
}
public void call() {
super.call();
System.out.println(" 折叠样式手机 ");
}
}
public class Client {
public static void main(String[] args) {
//获取折叠式手机 (样式 + 品牌 )
Phone phone1 = new FoldedPhone(new XiaoMi());
phone1.open();
phone1.call();
phone1.close();
}
以上就是桥接模式的相关理论知识。相关理论知识的讲解也就告一段落。接下来给到家讲解一下:桥接模式在JDBC中的应用
桥接模式在JDBC中的源码解析:
Jdbc 的Driver接口,如果从桥接模式来看,Driver就是一个接口,下面可以有 MySQL的Driver,Oracle的Driver,这些就可以当做实现接口类 说明: 并不是完全标准的桥接模式,而是有一定的差距
讲解:
首先Driver这个类实现了Driver 这个接口,通过注册驱动,调用DriverManager 的registerDriver() 方法,然后调用DriverManager的getConnection()方法获得连接;DriverManager里面的getConnection() 方法,返回一个Connection,Connection是一个接口,它的实现子类有一个ConnectionImpl,ConnectionImpl实现了JdbcConnection ,而JdbcConnection 又继承了Connection。
UML类图:

注意事项和细节
桥接模式的应用场景