刚刚学习了系统分析与设计,发现设计模式真的是个好东西。因此看了下好久之前买的《大话设计模式》,因此总结下最近的学习的设计模式,废话到此结束。
这里的代码跟书上的差不多,但书上的是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{
@Override
public double getResult() throws Exception {
if(num2 == 0){
throw new Exception("除数不能为0");
}
return num1/num2;
}
}
package com.jing.simpleFactory;
public class OperationAdd extends Operation{
@Override
public double getResult() {
return num1 + num2;
}
}
package com.jing.simpleFactory;
public class OperationMul extends Operation{
@Override
public double getResult() throws Exception {
return num1 * num2;
}
}
package com.jing.simpleFactory;
public class OperationSub extends Operation{
@Override
public 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.0
Operation 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(最终版本 简单设计模式):
在这版本中利用工厂控制了对象生成的处理,如果需求修改的话,就要修改工厂类和添加上相应的算法类。