软件设计模式之工厂模式实验

内容:使用工厂模式写一个简单的计算器,能实现加减乘除运算。要求输入两个数,选择运算符,程序便能够计算出结果。程序设计语言可自由选择。

1. 运用工厂模式设计,通过使用一个共同的运算类接口Operator,指向创建的AddOperator、SubOperator、MulOperatorDivOperator,即加减乘除这四个对象,通过运算工厂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();
	}
}

 

相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页