简单工厂模式--女娲造人造啥做啥

来源:互联网 发布:tomcat80端口被占用 编辑:程序博客网 时间:2024/06/09 16:59

有这样一个问题,以面向对象的方法去实现一个简单的计算器该怎么实现呢?

首先,有种很简单的思路,输入两个数,然后判断运算符类型,进行相应运算,最后输出结果。

这样的方法虽然也能完成,但是不符合面向对象的方法,并且如果有一种新加的运算符时,会显得十分

的冗余而不好更改。

那有没有一种更好的方法呢?

这就是简单工厂模式,理解就是女娲造人造啥做啥,工作类有相似的操作功能,并且当新加如

功能类时,不影响以及不需要修改其他的功能类。

先给出类图:




Operation类是一个抽象类,除了有两个成员变量外,还有个需要子类实现的抽象方法getResult();

统一的通过OperationFactory类去获得实例Operation的子类,根据特定的传入命令,要啥获得啥;

这样一来,如果要新加入一种计算功能,从类图上看,只需要添加一个类继承Operation,

并且在OperationFactory中加入相应实例化语句就行,而不需要动其他的类。

下面看详细的代码:

Operation类:

package com.blog.anla.SimpleFactory;public abstract class Operation {protected double numberA;protected double numberB;/** * 得到运算结果 * @return */public abstract double getResult();}

OperationAdd类:

package com.blog.anla.SimpleFactory;public class OperationAdd extends Operation{@Overridepublic double getResult() {return numberA + numberB;}}


OperationSub类:

package com.blog.anla.SimpleFactory;public class OperationSub extends Operation{@Overridepublic double getResult() {return numberA - numberB;}}


OperationMul类:

package com.blog.anla.SimpleFactory;public class OperationMul extends Operation{@Overridepublic double getResult() {return numberA*numberB;}}


OperationDiv类:

package com.blog.anla.SimpleFactory;public class OperationDiv extends Operation{@Overridepublic double getResult() {if(numberB != 0){return numberA / numberB;}else{return 0;}}}


OperationFactory类:

package com.blog.anla.SimpleFactory;/** * 简单工厂,需要啥类就考虑用一个 * 单独的类来创造示例工程。 * 降低了功能类之间的耦合性,如果要添加一个新功能, * 仅仅需要加相应的类,而不需要更改其他的类 * @author U-ANLA * */public class OperationFactory {public static Operation createOperate(char operate){Operation oper = null;switch (operate) {case '+':oper = new OperationAdd();break;case '-':oper = new OperationSub();break;case '*':oper = new OperationMul();break;case '/':oper = new OperationDiv();break;}return oper;}public static void main(String[] args) {Operation oper = OperationFactory.createOperate('+');oper.numberA = 1;oper.numberB = 2;System.out.println(oper.getResult());}}

赠人玫瑰手留余香,希望对大家有用哈

 ~( ̄▽ ̄~)~






原创粉丝点击