简单工厂模式及工厂模式

来源:互联网 发布:薛定谔的猫 知乎 编辑:程序博客网 时间:2024/05/22 12:58

 

设计模式基本同时也是应用最广泛的就是工厂模式。

首先来看一个简单工厂模式:

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接口,和一个运算类就可以了,我们不需要在更改我们的工厂类了。

工厂模式好处就是将实例化交给了子类,工厂类不再包含逻辑运算。这样就实现了开放—封闭原则。简单工厂类每次我们都有修改工厂类,对该类来说修改时不封闭的。对于小型的系统来说简单工厂的可读性使得他更实用,但是对于大型系统来说,工厂模式更加适合。

 

原创粉丝点击