定义:
定义一个创建对象的接口,让子类决定实例化哪个对象,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();
}
}
设计原则体现:
工厂方法模式很好的体现了“依赖倒置原则”。
顺序示意图:
平行的类层次结构
简单点说,假设有两个类层次结构,其中一个类层次中的每个类在另一个类层次中都有一个对应的类的结构,就被称为平行的类层次结构。可以使用工厂方法模式来连接平行的类层次结构