上一篇文章简要概述了简单工厂模式,随着需求的不断扩展,若每个课程的创建逻辑不同,则会导致工厂代码非常臃肿,有点像万能工厂,不便于维护,根据单一职责原则,我们将职能拆分,专人干专事儿,将万能的工厂拆分为创建Java的工厂,Python的工厂,对工厂本身也做一个抽象,于是工厂方法模式应运而生,下面来看代码,先定义个ICourceFactory接口:
public interface ICourceFactory {
ICource create();
}
再定义一个生产JavaCource的子工厂JavaICourceFactory
public class JavaICourceFactory implements ICourceFactory {
public ICource create() {
return new JavaCource();
}
}
再定义一个生产PythonCource的子工厂PythonCourceFactory
public class PythonICourceFactory implements ICourceFactory {
public ICource create() {
return new PythonCoure();
}
}
客户端
public class PythonICourceFactory implements ICourceFactory {
public ICource create() {
return new PythonCoure();
}
}
我们再看一下类图
若需要再开始一门C++课程,则之前的代码都不用动,只需要增加一个实现ICourceFactory接口的C++ICourceFactory即可,满足开闭原则。
工厂也有一定的缺点:
1)类的个数过多,增了代码的复杂度
2) 增加了代码抽象的复杂度,难于理解