设计模式基本同时也是应用最广泛的就是工厂模式。首先来看一个简单工厂模式:
public class OperateFactory{
public static Operate createOperate(String operate){
Operate of = new Operate();
switch(operate){
case "+":of=new AddOperate();
case "-":of=new DeduceOperate();
}
return of;
}
}
public class Operate{protected int numA;protected int numB;}
public class AddOperate extends Operate{public int getResult(){int result = super.numA+super.numB;return result;}}
客户端
public static void main(String[] args) {
Operate op = OperateFactory.createOperate("+");
op.numA=1;
op.numB=2;
op.getResult();
}
这是一个简单工厂模式,通过OperateFactory来实例化我们所需要的东西。假设增加乘法运算,修改工程类和增加一个MulOperate继承Operate即可。
简单工厂模式好处就是结构简单,能够实现代码复用,易于阅读。
下面我们在来看看工厂模式:还是实现以上功能。
public interface IFactory{
public Operate createOperate();
}
public class OperateAdd extends IIFactory{@Overridepublic Operate createOperate(){return new AddOperate();}}
同样,上边的Operate跟运算类不变
public class Operate{
protected int numA;
protected int numB;
}
public class AddOperate extends Operate{public int getResult(){int result = super.numA+super.numB;return result;}}
客户端
public static void main(String[] args) {
Operate op = OperateAdd.createOperate();
op.numA=1;
op.numB=2;
op.getResult();
}
简单看上去工厂模式要比简单工厂模式要麻烦些。同样,我们假设要增加一个乘法类该如何做?
我们只需新增一个OperateMul继承IFactory接口,和一个运算类就可以了,我们不需要在更改我们的工厂类了。
工厂模式好处就是将实例化交给了子类,工厂类不再包含逻辑运算。这样就实现了开放—封闭原则。简单工厂类每次我们都有修改工厂类,对该类来说修改时不封闭的。对于小型的系统来说简单工厂的可读性使得他更实用,但是对于大型系统来说,工厂模式更加适合。