版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pro_Vinny/article/details/81518497
工厂方法模式,一种对象创建型的设计模式,提供创建对象的接口,让子类决定要实例化的对象。通过依赖注入的方式达到解耦、复用的目的。
一、关键点
1)我们先来说下这个设计模式的关键点,“简单工厂” 和 “依赖注入”, 对,就这两个。
“简单工厂” :和简单工厂类似,该模式也是按需实例所需要的对象;
“依赖注入” :在 “简单工厂” 对基础上,这个模式对不同点是将对象的选择判断移到了调用者中,即 “依赖注入”。
2)我们再来看下它的类图关系:
这里有四个角色:抽象工厂、具体工厂,抽象产品、具体产品。
而抽象工厂和具体工厂,就是和工厂模式的区别所在,而这样的方式,就达到了上述说的“依赖注入”的解耦目的。
二、实现
2.1 抽象产品
产品对象的公共父类,或公共接口:
public interface IProduct {
/** defined method of product */
void create();
}
2.2 具体产品
实现抽象产品,定义具体的产品业务细节:
public class AProduct implements IProduct {
@Override
public void create() {
/** create product of 'A' */
}
}
public class BProduct implements IProduct {
@Override
public void create() {
/** create product of 'B' */
}
}
2.3 抽象工厂
工厂类的父类或者接口:
public interface IFactory {
/** method of create product */
IProduct createProduct();
}
2.4 具体工厂
具体实现的工厂,与业务的具体的产品对象相对应。客户端使用的时候直接可以根据需要来说注入对于的具体工厂:
public class AFactory implements IFactory {
@Override
public IProduct createProduct() {
return new AProduct();
}
}
public class BFactory implements IFactory {
@Override
public IProduct createProduct() {
return new BProduct();
}
}
三、小结
3.1 具体工厂与具体产品相对应,客户端可按需调用对应的工厂类来获取对应的产品对象,即依赖注入;
3.2 当生产者清楚需要什么样的产品,而不关心工厂细节,这时候就可以考虑使用该模式。