一、背景
有没有想过,市场上存在那么多数据库(什么mysql ,oracle,sqlserver...),如果我们每连一种数据库都要去new一个对应的数据库驱动实例,想想会怎么样?如果数据库变了,怎么办?是不是还得去修改代码?是不是违反了开闭原则?
二、概念
桥接模式:将抽象部分与实现部分解耦,使得二者可以独立变化。就像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动代码。原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。
三、代码实例
/**
* jdbc 统一接口
*/
interface JdbcInterface {
public void connectJdbc();
}
class MySqlconnec implements JdbcInterface {
@Override
public void connectJdbc() {
System.out.println("连接mysql");
}
}
class Oracleconnec implements JdbcInterface {
@Override
public void connectJdbc() {
System.out.println("连接oracle");
}
}
/**
* 抽象桥接角色
*/
abstract class DriverManagerBrigde {
private JdbcInterface jdbc;
public abstract void connectDataBase();//连接数据库抽象方法
public JdbcInterface getJdbc() {
return jdbc;
}
public void setJdbc(JdbcInterface jdbc) {
this.jdbc = jdbc;
}
}
/**
* 具体实现桥角色
*/
class Mybridge extends DriverManagerBrigde {
public void connectDataBase() {// 连接数据库的方法
getJdbc().connectJdbc();
}
}
public class BirdgePatternDemo {
public static void main(String agrs[]) {
DriverManagerBrigde mybridge = new Mybridge();
JdbcInterface mySqlconnec = new MySqlconnec();
// 连接mysql
mybridge.setJdbc(mySqlconnec);
mybridge.connectDataBase();
// 连接oracle
JdbcInterface oracleconnec = new Oracleconnec();
mybridge.setJdbc(oracleconnec);
mybridge.connectDataBase();
}
}