1. 程式人生 > >簡單工廠模式(靜態工廠方法(Static Factory Method)模式)

簡單工廠模式(靜態工廠方法(Static Factory Method)模式)

    簡單工廠模式

所謂的簡單工廠模式-----------這裡百度百科裡面的解釋:簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。簡單工引用百度廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現

簡單點說就是一個工廠類根據傳入的引數按照寫好的業務邏輯動態進行物件(該物件繼承了一個抽象的父類或介面)的建立。這樣可以減少很多物件的建立,提高程式碼質量,同時也方便拓展和維護。


這個模式包含了3個角色:工廠角色,抽象類角色,具體產品類。

工廠類:封裝了動態建立具體產品物件的業務邏輯。

抽象類角色:定義一系列的產品規範。

具體產品類:它是工廠的最終目標,工廠類按照自己的業務邏輯執行抽象類所定義的規範建立具體的產品類。

使用場景:

1.用於建立類比較少的時候。

2.客戶知道要給予傳入的引數型別

3.由於這種方法違反了高內聚的責任分配原則,所以一般用於比較簡單的情況。

程式碼樣例:(簡單的計算器)

抽象類設計

/**
 * 
 * @author Administrator 
 * 抽象類或父類介面
 * 
 */
public abstract class Operation {
	public Operation() {
		super();
		// TODO Auto-generated constructor stub
	}

	public double m_NumA;
	public double m_NumB;

	public double getM_NumA() {
		return m_NumA;
	}

	public void setM_NumA(double m_NumA) {
		this.m_NumA = m_NumA;
	}

	public double getM_NumB() {
		return m_NumB;
	}

	public void setM_NumB(double m_NumB) {
		this.m_NumB = m_NumB;
	}

	public Operation(double m_NumA, double m_NumB) {
		super();
		this.m_NumA = m_NumA;
		this.m_NumB = m_NumB;
	}
        //抽象方法
	public abstract double GetResult();
}

具體類設計

public class OperationDiv extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		double result=0.0d;
		try{
			result = m_NumA/m_NumB;
		}catch(Exception e){
			System.out.println("除數不能為0");
		}
		return result;
	}

}

public class OperationMul extends Operation {

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		return m_NumA*m_NumB;
	}

}
public class OperationAdd extends Operation {

	@Override
	public double GetResult() {	
		return m_NumA+m_NumB;
	}	
}

public class OperationSub extends Operation{

	@Override
	public double GetResult() {
		// TODO Auto-generated method stub
		return m_NumA-m_NumB;
	}

}

工廠類
/**
 * 工廠類:封裝了動態建立物件的邏輯
 * 
 * @author Administrator
 *
 */
public class Static_Factory {
	
	public Operation CreateOperation(String type) {
		Operation operation=null;
		switch (type) {
		case "+": {
			operation = new OperationAdd();
		}
			break;
		case "-": {
			operation = new OperationSub();
		}
			break;
		case "*": {
			operation=new OperationMul();
		}
			break;
		case "/": {
			operation=new OperationDiv();
		}
			break;
			default:break;
		}
		return operation;
		
	}


	public Static_Factory() {
		super();
		// TODO Auto-generated constructor stub
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub


	}
}
測試
public class Test {

	public static void main(String[] args) {
		//建立工廠
		Static_Factory factory= new Static_Factory();
		Operation operation = factory.CreateOperation("+");
		operation.m_NumA=1;
		operation.m_NumB=2;
		System.out.println("結果為:"+operation.GetResult());
	}
}