内容:使用工厂模式写一个简单的计算器,能实现加减乘除运算。要求输入两个数,选择运算符,程序便能够计算出结果。程序设计语言可自由选择。
1. 运用工厂模式设计,通过使用一个共同的运算类接口Operator,指向创建的AddOperator、SubOperator、MulOperator和DivOperator,即加减乘除这四个对象,通过运算工厂OperatorFactory获取运算类。
2.实验代码如下:
//运算类接口
public interface Operator {
//获取结果
public double operation(double num1,double num2);
}
//以下是四个运算的实现类
//AddOperator.java
//加法运算,继承运算类接口
public class AddOperator implements Operator {
public double operation(double num1,double num2) {
return num1+num2;
}
}
//SubOperator.java
//减法运算继承运算类接口
public class SubOperator implements Operator {
public double operation(double num1,double num2) {
return num1-num2;
}
}
//MulOperator.java
//乘法运算继承运算类接口
public class MulOperator implements Operator {
public double operation(double num1,double num2) {
return num1*num2;
}
}
//DivOperator.java
//除法运算继承运算类接口
public class DivOperator implements Operator {
public double operation(double num1,double num2) {
if(num2!=0) {
return num1/num2;
}
else {
System.out.println("除数不能为0");
return 0;
}
}
}
//OperatorFactory.java
//使用工厂模式实现简单四则运算
//创建运算类工厂
public class OperatorFactory {
//使用getOperator方法获取运算类对象
public static Operator getOperator(String operType) {
if(operType.equals("+")) {
return new AddOperator();
}else if(operType.equals("-")) {
return new SubOperator();
}else if(operType.equals("*")) {
return new MulOperator();
}else if(operType.equals("/")) {
return new DivOperator();
}else {
System.out.println("目前不支持这种操作");
return null;
}
}
}
//OperatorDemo.java
import java.util.Scanner;
import java.util.regex.Pattern;
//客户端
public class OperatorDemo {
public static void main(String[] args) {
//输入数字以及运算符号
System.out.println("请输入第一个数字:");
Scanner scanner = new Scanner(System.in);
String num1 = scanner.nextLine();
System.out.println("请输入运算符(+-*/):");
String operType = scanner.nextLine();
System.out.println("请输入第二个数字:");
String num2 = scanner.nextLine();
//通过工厂获取运算类
Operator operator = OperatorFactory.getOperator(operType);
if(operator!=null)
{
if(isDouble(num1) && isDouble(num2))
{
//调用operation方法输出结果
double operation = operator.operation(Double.parseDouble(num1),Double.parseDouble(num2));
System.out.println("结果是:"+operation);
}else {
System.out.println("请输入正确的数字");
}
}
}
//判断浮点数(double和float)
public static boolean isDouble(String str) {
if(null == str || "".equals(str)) {
return false;
}
//数字,包括整数和浮点
Pattern pattern = Pattern.compile("^[0-9]+(.[0-9]+)?$");
return pattern.matcher(str).matches();
}
}