工厂方法《漫谈设计模式》阅读笔记
工厂方法
工厂方法模式经常用于以下情景:
1.客户类不关心使用哪个具体类,只关心该接口所提供的功能。
2.创建过程比较复杂,例如需要初始化其它关联的资源类,读取配置文件等等。
3.接口有很多具体实现或者抽象类有很多具体子类时,你可能需要为客户代码写一大串if-else逻辑来决定运行时使用哪个具体实现或者具体子类。
4.不希望给客户程序暴露过多此类的内部结构,隐藏这些细节可以降低耦合度。
5.优化性能,比如缓存大对象或者初始化比较耗时的对象。
工厂方法模式定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。
工厂方法模式是对实例化过程进行封装而形成的,客户对象无需关心实例化这些类的细节,把它们交给工厂类。该模式比较简单,我们从UML静态类图着手。
代码实现:
Public interface Factory{
Product createProduct();
}
Public class ConcreteFactory implements Factory{
@Override
Public Product createProduct(){
Return new ConcreteProduct();
}
}
Public interface Product{
}
Public class ConcreteProduct implements Product{
}
如果具体实现类较多,我们可以定义一个参数化的工厂方法,根据不同的输入返回不同的实现子类,代码片段如下:
Public Product createProduct(String type){
If("type1".equals(type)){
Return a type1 instance...
}else if("type2".equals(type)){
Return a type2 instance...
}else{
...
}
}
客户对象可以根据需要传入不同的参数获得不同类型的对象。