內容:使用工廠模式寫一個簡單的計算器,能實現加減乘除運算。要求輸入兩個數,選擇運算符,程序便能夠計算出結果。程序設計語言可自由選擇。
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();
}
}