深入淺出設計模式之工廠模式

                                                            深入淺出設計模式之工廠模式

 

  隨着工作經歷的不斷增加,每一個程序員都不可避免的會涉及到從一個普通程序員成長爲一個高級或資深程序員的過程。在這個工程中,需要學習很多更加深入的知識,這其中就包括針對代碼結構的設計和優化的思想,而培養這種思想的前提就是需要學習設計模式。在接下來的一段時間內,本人將逐一分享一些設計模式的經驗。希望對各位學習設計模式有一些幫助。
工廠模式
工廠模式定義:提供創建一組對象的標準接口。
如何使用?
      工廠模式應該是任何一個系統中使用最多的設計模式之一,爲什麼說工廠模式最爲常用,原因很簡單,因爲工廠模式的作用就是替代我們的代碼中出現new關鍵字對一個對象的創建,工廠模式就是用來創建對象。
一般情況下,我們創建一個對象,使用如下代碼:
Node node = new Node();
如果我們需要傳入構造參數,創建的代碼如下:
Node Node = new Node(參數);
      但是,在很多情況下,我們創建一個對象都不是簡單的屬於參數就可以完成的,比如:查詢數據,或者通過配置文件獲取一些信息等,這就導致了一個類的構造函數中需要實現較多的功能,這樣不利用代碼優雅設計,代碼極爲難看。
爲什麼說,這種情況下代碼極爲難看。很多人都知道,在程序設計中,Java提倡面向對象原則,而面向對象原則有提倡分派和封裝。儘量將較長的代碼段分派到各個單一職責的方法或者接口中去實現,這一點也是Java中提倡的單一職責原則。這樣做降低了代碼修改的難度,如果需要修改代碼,只需要修改一處,不會導致牽一髮而動全身。
下面使用一些例子來說明工廠方法的使用:
首先建立創建Node的工廠類:

public class NodeFactory {
	
	public Node create(int type) {
		if (type == 1) {
			return new NodeA();
		} else if (type == 2) {
			return new NodeB();
		} else {
			throw new RuntimeException("Error Type: " + type);
		}
		
	}
}


     這樣來初始化Node對象的直接好處就是,在我們需要初始化Node歸到一個地方來實現,這樣就可以方便的修改Node對象初始化的過程。同樣也減少了出現錯誤的機率,必進事情越少做,越不容易犯錯誤。
工廠模式分爲兩種:工廠方法模式和抽象工廠模式
     在上邊的例子中,我們實現的是工廠方法模式,如果創建的對象複雜度升高,這個時候就需要使用抽象工廠模式。具體來看一下代碼:
這裏假設,Node有連個實現類NodeA和NodeB,同樣Node2也有兩個實現類Node2A和Node2B,那麼我們將上列中的Factory變成抽象工廠類實現,實現抽象工廠模式

public abstract class AbstractFactory {
	
	public abstract Node createNode();
	
	public abstract Node2 createNode2();
	
	
	class NodeAFactory extends AbstractFactory {

		@Override
		public Node createNode() {
			return new NodeA();
		}

		@Override
		public Node2 createNode2() {
			return new Node2B();
		}
		
	}
	
	class NodeBFactory extends AbstractFactory {

		@Override
		public Node createNode() {
			return new NodeB();
		}

		@Override
		public Node2 createNode2() {
			return new Node2B();
		}
		
	}
} 



   從上面看,我們實現了一個抽象工廠,分別產生NodeA和Node2A的工廠,和NodeB和Node2B的工廠。至此,我們已經詳細介紹了工廠模式的使用,這裏的例子只是簡單的實現。在實際的生成環境的系統中,工廠模式往往還可以結合其他模式一起使用,比如享元模式。這些實現我們可以在後續的講解中提及到。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章