设计模式基本同时也是应用最广泛的就是工厂模式。
首先来看一个简单工厂模式:
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{
@Override
public 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接口,和一个运算类就可以了,我们不需要在更改我们的工厂类了。
工厂模式好处就是将实例化交给了子类,工厂类不再包含逻辑运算。这样就实现了开放—封闭原则。简单工厂类每次我们都有修改工厂类,对该类来说修改时不封闭的。对于小型的系统来说简单工厂的可读性使得他更实用,但是对于大型系统来说,工厂模式更加适合。