定義:
定義一個建立物件的介面,讓子類決定例項化哪個物件,FactoryMethod使一個類的例項化延遲到子類。
工廠方法模式結構示意圖:
Creator: 建立器,定義工廠方法,工廠方法會返回一個Product物件,通常都是抽象方法,也可以提供預設的實現,讓工廠方法返回一個預設的物件。
ConcreateCreator: 具體建立器實現類。覆蓋Creator的工廠方法,返回具體的Product物件
Product: 工廠方法需要建立物件的介面。
ContreteProduct: 具體Product的實現。
JDK和Spring原始碼中的工廠方法模式:
java.lang.Proxy#newProxyInstance()
java.lang.Object#toString()
java.lang.Class#newInstance()
java.lang.reflect.Array#newInstance()
java .lang.reflect.Constructor#newInstance()
java.lang.Boolean#valueOf(String)
java.lang.Class#forName()
org.springframework.beans.factory.BeanFactory
//org.apache.ibatis.datasource.DataSourceFactory原始碼實現
interface DataSourceFactory{
DataSource getDataSource();
}
class UnpooledDataSourceFactory implements DataSourceFactory{
protected DataSource dataSource = new UnpooledDataSource();
public DataSource getDataSource() {
return this.dataSource;
}
}
class PooledDataSourceFactory extends UnpooledDataSourceFactory {
public PooledDataSourceFactory() {
this.dataSource = new PooledDataSource();
}
}
複製程式碼
設計原則體現:
工廠方法模式很好的體現了“依賴倒置原則”。
順序示意圖:
平行的類層次結構
簡單點說,假設有兩個類層次結構,其中一個類層次中的每個類在另一個類層次中都有一個對應的類的結構,就被稱為平行的類層次結構。可以使用工廠方法模式來連線平行的類層次結構