1.工廠模式
mybatis的數據源模塊使用了工廠模式,分析源碼前先講下工廠模式。
(1)簡單工廠模式
簡單工廠模式是工廠類直接根據參數創建不同對象。
public class SimpleFactory {
public static final int TYPE1= 1;
public static final int TYPE2 = 2;
public static final int TYPE3 = 3;
public static A createA(int type) {
switch (type) {
case TYPE1:
return new A1();
case TYPE2:
return new A2();
case TYPE3:
default:
return new A3();
}
}
}
(2)工廠方法模式
工廠模式相對於簡單工廠莫斯來說,不止一個工廠,每個工廠只生產一種產品。客戶端負責挑選使用哪個工廠。
首先有一個工廠接口。
public interface ICarFactory {
public ICar getCar();
}
然後多個工廠類實現。
public class ACarFactory implements ICarFactory {
public ICar getCar(){
return new ACar();
};
}
public class BCarFactory implements ICarFactory {
public ICar getCar(){
return new BCar();
};
}
(3)抽象工廠模式
抽象工廠模式是工廠方法模式的一個升級,工廠方法模式中只有一種產品,而抽象工廠模式中有多種產品,比如抽象工廠接口變爲:
public interface ICarFactory {
public ICar getCar();
public IHouse getHouse();
}
然後每個工廠實現內部都有兩種產品。剩下的不多說。
2.mybatis的數據源
mybatis用的是工廠方法模式,有一個數據源工廠接口DataSourceFactory。
public interface DataSourceFactory {
//設置DataSource的相關屬性
void setProperties(Properties props);
//獲取數據源
DataSource getDataSource();
}
然後有三個工廠實現類。
JndiDataSourceFactory、UnpooledDataSourceFactory、PooledDataSourceFactory。
我們平常用的是第三個,有連接池的工廠類,具體源碼很簡單,這裏不多說。