軟件設計模式之工廠模式實驗

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

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();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章