设计模式之简单工厂模式

来源:互联网 发布:c4d软件安装教程 编辑:程序博客网 时间:2024/06/17 14:08

简单工厂模式实现的目标是使业务层和界面进行分离。还是举例说明:

现在有一个需求让你实现类似计算机的加减乘除功能,如果我们不是用设计模式思想,把所有的业务代码写到一个类中,也能实现需求但是,如果增加新的需求呢?比如我在原来的基础上增加开根的需求,那么你就要对已经写好的代码进行更改,极有可能出现把已经完成的代码“破坏”的情况,而且不利于别人对项目的二次开发。下面我们引入简单工厂模式:先贴出代码(Java)

业务层code

package com.lava.FactoryPattern;/* * 作为加减乘除的基类。 */public abstract class Operation {public  double numberA;public  double numberB;public double getNumberA() {return numberA;}public void setNumberA(double numberA) {this.numberA = numberA;}public double getNumberB() {return numberB;}public void setNumberB(double numberB) {this.numberB = numberB;}public abstract double getResult();}

package com.lava.FactoryPattern;/* * 加操作 */public class OperationAdd extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA+numberB;}}

package com.lava.FactoryPattern;/* * 减操作 */public class OperationSub extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA-numberB;}}

package com.lava.FactoryPattern;/* * 乘操作 */public class OperationMul extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA*numberB;}}

package com.lava.FactoryPattern;/* * 除操作 */public class OperationDiv extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA/numberB;}}

简单工厂:

package com.lava.FactoryPattern;/* * 工厂模式 */public class OperationFactory {public Operation getOper(char c){Operation op=null;switch (c){case '+': op=new OperationAdd();break;case '-': op=new OperationSub();break;case '*': op=new OperationMul();break;case '/': op=new OperationDiv();break;}return op;}}

控制台

package com.lava.FactoryPattern;/* * 控制台 */public class Main {public static void main(String[] args) {Operation oa=new OperationFactory().getOper('+');oa.setNumberA(2);oa.setNumberB(3);System.out.println(oa.getResult());}}

把所有的功能作为不同的类分开看似繁琐,但是有一个极大的优势,如果要增加新的功能你只需要在业务层增加一个OperationSqrt.class 代码就不写了。下面总结一下这样写的优势:

总结:

1、存在的条件是以基类作为基础、很多子类继承它。这要如果没有工厂模式。你需要在控制台上new很多的对象,失去了控制台的意义,控制台不需要知道你具体是怎么实现的,它只要通过'+','-','*','/' 符号,传入数,得到结果就行。

2、在有多个子类时,工厂类的作用是,通过控制台输入的信息,判断我要实例化那个子类(多态特性)。传给控制台即可。

3、有新的需求比如开根,只需要增加OperationSqrt.class,在控制台增加Operation oa=new  OperationFactory().getOper('sqr'); 这样实现了程序的灵活性,增强代码的可读性。

4、不需要更改已经写好的类。

简单工厂:控制台通过简单工厂模式知道具体调用了哪个子类。

0 0