1. 程式人生 > >大話設計模式java版--簡單工廠模式

大話設計模式java版--簡單工廠模式

剛剛學習了系統分析與設計,發現設計模式真的是個好東西。因此看了下好久之前買的《大話設計模式》,因此總結下最近的學習的設計模式,廢話到此結束。

這裡的程式碼跟書上的差不多,但書上的是C#版的,這裡我自己重新寫的是Java的。。。。其實都差不多,好不好

現在就簡單說說簡單工廠模式:

需求:設計個計算器,兩個數字之間的加減乘除基本運算。

分析:計算器加減乘除是基本運算,萬一使用者需要新增新運算,例如n次方。

設計:將演算法類抽象為抽象類,具體演算法繼承演算法類。

程式碼:

運算抽象類:

package com.jing.simpleFactory;

public abstract class Operation {
	public double getNum1() {
		return num1;
	}
	public void setNum1(double num1) {
		this.num1 = num1;
	}
	public double getNum2() {
		return num2;
	}
	public void setNum2(double num2) {
		this.num2 = num2;
	}
	protected double num1;
	protected double num2;
	public abstract double getResult() throws Exception;
}

具體演算法:
package com.jing.simpleFactory;

public class OperationDiv extends Operation{

	@Override
	public double getResult() throws Exception {
		if(num2 == 0){
			throw new Exception("除數不能為0");
		}
		return num1/num2;
	}

}


package com.jing.simpleFactory;

public class OperationAdd extends Operation{

	@Override
	public double getResult() {
		return num1 + num2;
	}

}
package com.jing.simpleFactory;

public class OperationMul extends Operation{

	@Override
	public double getResult() throws Exception {
		
		return num1 * num2;
	}

}
package com.jing.simpleFactory;

public class OperationSub extends Operation{

	@Override
	public double getResult() {
		return num1 - num2;
	}

}

簡單工廠:

package com.jing.simpleFactory;

public class OperationFactory {
	public static Operation createOperation(String operate){
		if(operate.equals("+")){
			return new OperationAdd();
		}else if(operate.equals("-")){
			return new OperationSub();
		}else if(operate.equals("*")){
			return new OperationMul();
		}else if(operate.equals("/")){
			return new OperationDiv();
		}else{
			return null;
		}
	}
}

Main函式:

package com.jing.simpleFactory;


public class Test {

	
	
	public static void main(String[] args) {
//ver1.0
////		Test test = new Test();
////		System.out.println(test.add(1,2));
//		System.out.println("請輸入兩個數字");
//		Scanner scan = new Scanner(System.in);
//		String num1 = scan.next();
//		scan = new Scanner(System.in);
//		String num2 = scan.next();
//		System.out.println("輸入符號");
//		scan = new Scanner(System.in);
//		String oper = scan.next();
//		if(oper.equals("+")){
//			
//		}else if(oper.equals("-")){
//			
//		}else if(oper.equals("*")){
//			
//		}else if(oper.equals("/")){
//			
//		}
//		System.out.println(num1 + " " +num2 +" "+ oper);
//		
//		//ver2.0
//		Operation oper = new OperationAdd();
//		oper.setNum1(1.1);
//		oper.setNum2(2.2);
//		try {
//			System.out.println(oper.getResult());
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		
		//ver3.0
		Operation oper = OperationFactory.createOperation("/");
		oper.setNum1(1.1);
		oper.setNum2(3);
		try {
			System.out.println(oper.getResult());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
}


大家結合著書來看會更有益處。其中main函式中有三個版本哦:三個版本也是不斷進步的版本。

大家先看看main函式中版本ver1.0:

這是最開始的版本。ui程式碼與演算法程式碼結合在一起,這種版本的程式碼修改起來牽連太多。

ver2.0:

在2.0版本中,new生成物件處理交給了客戶端處理了。

ver3.0(最終版本 簡單設計模式):

在這版本中利用工廠控制了物件生成的處理,如果需求修改的話,就要修改工廠類和新增上相應的演算法類。