工厂模式是简单工厂模式的完善版本,它相较于简单工厂模式,更加符合开闭原则,但也更加复杂。
首先我们回忆一下简单工厂模式中的例子,在这个例子中,我们创建了计算器算法的简单工厂,通过判断传入的参数,分别创建出相应的对象。这样做会有什么问题呢?当我们需要增加新的算法时,不仅要新创建一个算法类,还要去修改简单工厂,加入对新算法的判断。这样就违反了开闭原则,修改了原来的类。那么我们如何用工厂模式来重写呢?
首先需要一个工厂接口,所有的工厂都实现这个接口。
public interface IOperationFactory {
Operation creationOperation();
}
然后加减乘除等算法,都分别创建一个具体的工厂来实现这个接口
public class AddFactory implements IOperationFactory{
@Override
public Operation creationOperation(){
return new OperationAdd();
}
}
public class SubFactory implements IOperationFactory {
@Override
public Operation creationOperation() {
return new OperationSub();
}
}
…
客户端调用的时候
IOperationFactory opFactory = new AddFactory();
Operation op = opFactory.creationOperation();
op.setNumA(1);
op.setNumB(2);
System.out.println(op.getResult());
工厂方法将简单工厂的内部判断逻辑,移动到了客户端代码进行。这样开起来会比简单工厂模式更麻烦一些,开发量也更大,但更加符合开闭原则。
相关demo可以参考我的gitee仓库
https://gitee.com/akitsuki-kouzou/DesignPatternDemo