使用簡單工廠模式寫一個簡單的計算器!!!


很經典又基本的一個面試題了,新手基本都會掉進去的坑,還是沒有自己的變成思想,哈哈.....

其實主要就是考慮一下使用面向對象和接口,以及計算器的可擴展性,話不多說:

接口:

//運算類接口
public interface Operator {
	//獲取結果
	public double getResult(double num1,double num2);

}

  

運算的實現類:

//加法運算
public class AddOperator implements Operator {
	@Override
	public double getResult(double num1, double num2) {
		return num1+num2;
	}

}

  

//除法
public class DivOperator implements Operator {
	@Override
	public double getResult(double num1, double num2) {
		if(num2!=0){
			return num1*num2;			
		}else{
			System.out.println("除數不能為0");
			return 0;
		}
	}
}

  其他運算類似

 

運算工廠:

//創建運算類工廠
public class OperatorFactory {
	//返回運算類對象
	public static Operator getOperator(String oper){
		if(oper.equals("+")){
			return new AddOperator();
		}else if(oper.equals("-")){
			return new SubOperator();
		}else if(oper.equals("*")){
			return new MulOperator();
		}else if(oper.equals("/")){
			return new DivOperator();
		}else{
			System.out.println("目前不支持這種操作");
			return null;
		}
	}
}

  

 

主函數測試:

//使用工廠模式開發一個簡單計算器
public class CaclTest {
	public static void main(String[] args) {
		System.out.println("請輸入第一個數字:");
		Scanner scanner=new Scanner(System.in);
		String num1 = scanner.nextLine();
		System.out.println("請輸入運算符(+-*/):");
		String oper = scanner.nextLine();
		System.out.println("請輸入第二個數字:");
		String num2 = scanner.nextLine();
		//通過工廠獲取運算類
		Operator operator = OperatorFactory.getOperator(oper);
		if(operator!=null){
			if(isDouble(num1) && isDouble(num2)){
				double result = operator.getResult(Double.parseDouble(num1), Double.parseDouble(num2));
				System.out.println("結果是:"+result);							
			}else{				
				System.out.println("請輸入正確的數字!");							
			}
		}
	}
	//判斷浮點數(double和float)
	private 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();
	}
}

  主要考慮一下可能遇到的異常就行了,這里如果以后要增加運算的話,需要改一下工廠類,並添加一個具體運算實現類,想想也挺麻煩的,哈哈

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM