用面向对象的思想是实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果
类图
工程目录
新建一个Java控制台程序即可
代码
AbstractOperation.java
package com.company.pattern.demo01;
/**
* show 运算类
* @author Blazar
*/
public abstract class AbstractOperation {
private double numberA;
private double numberB;
/**
* 得到运算结果
* @author blazar
* @return 运算结果
*/
public abstract double getResult();
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;
}
}
OperationAdd.java
package com.company.pattern.demo01;
/**
* 加法
* @author blazar
*/
public class OperationAdd extends AbstractOperation{
@Override
public double getResult() {
double result=0;
result = getNumberA()+getNumberB();
return result;
}
}
OperationFactory.java
package com.company.pattern.demo01;
/**
* 简单运算工厂类
*/
public class OperationFactory {
public static AbstractOperation createOperation(String operation){
AbstractOperation oper = null;
switch(operation){
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
测试代码 Main.java
package com.company.pattern.demo01;
/**
* @author blazar
*/
public class Main {
/**
* 简单工厂模式
* 用面向对象的思想是实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果
*/
public static void main(String[] args) {
// write your code here
try{
AbstractOperation oper = OperationFactory.createOperation("+");
oper.setNumberA(1.5);
oper.setNumberB(1.2);
System.out.println(oper.getResult());
}
catch(Exception ex){
System.out.println("输入格式错误: "+ex.getMessage());
}
}
}
变化点
修改
- 如果是需要更改加法运算,只需要修改运算子类OperationSub.java就可以了;
新增
- 如果是需要增加运算,如平方根的计算,需要两步:第一步,增加对应的运算子类;第二步,修改运算类工厂,在switch中添加分支;
参考《大话设计模式》