问题
写一个简单的计算器
分析
如果使用完全面向过程设计, 那么缺少代码重用, 不合理
应该采用面向对象的设计思想
代码
采用工厂方法模式
工厂
public interface OperationFactory {
public Operation getOperation();
}public class AddOperationFactory implements OperationFactory {
@Override
public Operation getOperation() {
return new AddOperation();
}
}产品
public abstract class Operation {
private double num1;
private double num2;
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;
}
public abstract double getResult();
}public class AddOperation extends Operation {
@Override
public double getResult() {
double result = this.getNum1() + this.getNum2();
return result;
}
}测试代码
public class MainClass {
public static void main(String[] args) {
System.out.println("输入第一个操作数");
Scanner scanner = new Scanner(System.in);
String strNum1 = scanner.nextLine();
System.out.println("输入操作符");
String oper = scanner.nextLine();
System.out.println("输入第一个操作数");
String strNum2 = scanner.nextLine();
scanner.close();
double result = 0;
double num1 = Double.parseDouble(strNum1);
double num2 = Double.parseDouble(strNum2);
if ("+".equals(oper)) {
OperationFactory operationFactory = new AddOperationFactory();
Operation operation = operationFactory.getOperation();
operation.setNum1(num1);
operation.setNum2(num2);
result = operation.getResult();
}
System.out.println(strNum1 + oper + strNum2 + "=" + result);
}
}注: 本例中只写了加法操作运算, 如添加其他运算 可以通过实现Operation接口来增加新的运算类, 实现OperationFactory接口来增加新的运算工厂. 符合开放-封闭原则使用简单工厂也可以完成,客户端省去判断操作符的逻辑, 由工厂来完成 可以用反射+配置文件(根据id或name 来找到class)来创建对象
本文介绍了一个基于面向对象设计思想的简单计算器实现方案。利用工厂方法模式创建不同的运算对象,通过抽象基类`Operation`和具体子类`AddOperation`实现了加法运算。此设计易于扩展其他运算类型,遵循开放-封闭原则。
2410

被折叠的 条评论
为什么被折叠?



