1. 程式人生 > >簡單工廠模式的java實現例子

簡單工廠模式的java實現例子

說明:本文是《大話設計模式》一書的學習文摘和網上相關資訊文摘,原書程式碼例子用C#寫,下面用Java改寫。

1、簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法模式。
它的實現方式是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類(這些產品類繼承自一個父類或介面)的例項。

2、簡單工廠模式由三種角色組成: 
(1)工廠角色:簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件。
(2)抽象產品角色:簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。 
(3)具體產品角色:是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。

3、簡單工廠模式的UML類圖:


4、下面實現了一個加減乘除的簡單工廠模式

package demo1;

public abstract class Operation {
	private double numberA = 0;
	private double numberB = 0;

	public void setNumberA(double numberA) {
		this.numberA = numberA;
	}

	public void setNumberB(double numberB) {
		this.numberB = numberB;
	}

	public double getNumberA() {
		return numberA;
	}

	public double getNumberB() {
		return numberB;
	}

	public double getResult() {
		double result = 0;
		return result;
	}	
}


package demo1;

public class OperationAdd extends Operation {
	
	@Override
	public double getResult() {
		double result = 0;
		result = super.getNumberA() + super.getNumberB();
		return result;
	}
}

package demo1;

public class OperationSub extends Operation {
	
	@Override
	public double getResult() {
		double result = 0;
		result = super.getNumberA() - super.getNumberB();
		return result;
	}
}

package demo1;

public class OperationMul extends Operation {

	@Override
	public double getResult() {
		double result = 0;
		result = super.getNumberA() * super.getNumberB();
		return result;
	}
}


package demo1;

public class OperationDiv extends Operation {

	@Override
	public double getResult() {
		double result = 0;
		if (super.getNumberB() == 0)			
			throw new ArithmeticException("除數不能為0.");			
		result = super.getNumberA() / super.getNumberB();
		return result;
	}

}


package demo1;

public class OperationFactory {
	public static Operation createOperate(String operate) {
		Operation oper = null;
		switch (operate) {
			case "+":
				oper = new OperationAdd();
				break;
			case "-":
				oper = new OperationSub();
				break;
			case "*":
				oper = new OperationMul();
				break;
			case "/":
				oper = new OperationDiv();
				break;
		}
		return oper;
	}

}


package demo1;

public class Demo1 {
	public static void main(String[] args) {
		Operation oper;
		oper = OperationFactory.createOperate("/");
		oper.setNumberA(10);
		oper.setNumberB(7);
		double result = oper.getResult();
		System.out.println(result);
	}
}



相關推薦

no