大话设计模式java版--简单工厂模式

来源:互联网 发布:好用的日记本软件 编辑:程序博客网 时间:2024/06/05 21:16

刚刚学习了系统分析与设计,发现设计模式真的是个好东西。因此看了下好久之前买的《大话设计模式》,因此总结下最近的学习的设计模式,废话到此结束。

这里的代码跟书上的差不多,但书上的是C#版的,这里我自己重新写的是Java的。。。。其实都差不多,好不好

现在就简单说说简单工厂模式:

需求:设计个计算器,两个数字之间的加减乘除基本运算。

分析:计算器加减乘除是基本运算,万一用户需要添加新运算,例如n次方。

设计:将算法类抽象为抽象类,具体算法继承算法类。

代码:

运算抽象类:

package com.jing.simpleFactory;public abstract class Operation {public double getNum1() {return num1;}public void setNum1(double num1) {this.num1 = num1;}public double getNum2() {return num2;}public void setNum2(double num2) {this.num2 = num2;}protected double num1;protected double num2;public abstract double getResult() throws Exception;}
具体算法:
package com.jing.simpleFactory;public class OperationDiv extends Operation{@Overridepublic double getResult() throws Exception {if(num2 == 0){throw new Exception("除数不能为0");}return num1/num2;}}


package com.jing.simpleFactory;public class OperationAdd extends Operation{@Overridepublic double getResult() {return num1 + num2;}}
package com.jing.simpleFactory;public class OperationMul extends Operation{@Overridepublic double getResult() throws Exception {return num1 * num2;}}


package com.jing.simpleFactory;public class OperationSub extends Operation{@Overridepublic double getResult() {return num1 - num2;}}

简单工厂:

package com.jing.simpleFactory;public class OperationFactory {public static Operation createOperation(String operate){if(operate.equals("+")){return new OperationAdd();}else if(operate.equals("-")){return new OperationSub();}else if(operate.equals("*")){return new OperationMul();}else if(operate.equals("/")){return new OperationDiv();}else{return null;}}}

Main函数:

package com.jing.simpleFactory;public class Test {public static void main(String[] args) {//ver1.0////Test test = new Test();////System.out.println(test.add(1,2));//System.out.println("请输入两个数字");//Scanner scan = new Scanner(System.in);//String num1 = scan.next();//scan = new Scanner(System.in);//String num2 = scan.next();//System.out.println("输入符号");//scan = new Scanner(System.in);//String oper = scan.next();//if(oper.equals("+")){////}else if(oper.equals("-")){////}else if(oper.equals("*")){////}else if(oper.equals("/")){////}//System.out.println(num1 + " " +num2 +" "+ oper);//////ver2.0//Operation oper = new OperationAdd();//oper.setNum1(1.1);//oper.setNum2(2.2);//try {//System.out.println(oper.getResult());//} catch (Exception e) {//e.printStackTrace();//}//ver3.0Operation oper = OperationFactory.createOperation("/");oper.setNum1(1.1);oper.setNum2(3);try {System.out.println(oper.getResult());} catch (Exception e) {e.printStackTrace();}}}


大家结合着书来看会更有益处。其中main函数中有三个版本哦:三个版本也是不断进步的版本。

大家先看看main函数中版本ver1.0:

这是最开始的版本。ui代码与算法代码结合在一起,这种版本的代码修改起来牵连太多。

ver2.0:

在2.0版本中,new生成对象处理交给了客户端处理了。

ver3.0(最终版本 简单设计模式):

在这版本中利用工厂控制了对象生成的处理,如果需求修改的话,就要修改工厂类和添加上相应的算法类。


0 0
原创粉丝点击