簡單工廠模式

工廠模式

工廠方法模式又叫虛擬構造函數模式或者多態性工廠模式。工廠方法的用意是定義一個創建產品對象的工廠接口,將實際創見性工作推遲到子類中去。工廠模式可以分爲簡單工廠、工廠方法和抽象工廠模式。

簡單工廠模式

嚴格說簡單工廠模式不在23種GoF設計模式之中,它是由工廠決定創建具體類的實例。一個工廠類處於對產品類實例化的中心位置,它知道每一個產品,決定哪一個產品類應當被實例化。

優點:允許客戶端(具體產品類)相對獨立於產品實例的創建過程,當引入新的產品的時候,不需要修改現有的產品類。

缺點由於對象的創建完全由工廠類控制,引入新的產品的時候就必須修改工廠類的相應的邏輯。


簡單工廠模式的UML圖如下:


邏輯涉及到的對象有以下3種:

工廠角色(Cerator):簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。

抽象產品角色(IProduct):簡單工廠模式所創建的所有對象的父類,所有實例所共有的公共接口。

具體產品角色(ConcreteProduct):簡單工廠模式的創建的實際目標。


下面是一個應用了簡單工廠模式的,生產手機和電腦的電子工廠例子。

抽象產品接口:

public interface Iproduct {

	public void doSomething() ;
}

具體產品角色:手機phone

public class Phone implements Iproduct{

	@Override
	public void doSomething() {
		System.out.println("手機:打電話");
	}
}

具體產品角色:電腦computer

public class Computer implements Iproduct{

	@Override
	public void doSomething() {
		System.out.println("電腦:上網");
	}
}

工廠角色:Creator

public class Creator {

	public static Iproduct getProduct(String productName) throws Exception{
		Iproduct product = null;
		if(productName.equals("computer")) product = new Computer();
		else if(productName.equals("phone")) product = new Phone();
		else {
			throw new Exception("工廠無法生產該產品!");
		}
		return product;
	}
}

測試類:

public class Test {

	public static void main(String[] args) throws Exception{
		//獲取手機phone的實例
		Phone phone = (Phone)Creator.getProduct("phone");
		phone.doSomething();
		
		//獲取電腦的實例
		Computer computer = (Computer)Creator.getProduct("computer");
		computer.doSomething();
	}
}


發佈了65 篇原創文章 · 獲贊 34 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章