定義:簡單工廠模式又叫做靜態工廠模式,它定義乙個具體的工廠類來 負責建立一些類的例項,而這些被建立的類應該有乙個共同的父類, 這樣就可以面向抽象而不是面向具體程式設計。
說明:不屬於23種gof設計模式;工廠方法一般設成靜態方法,返回值一般是抽象類或介面,具體的產品類一般繼承或實現抽象類、介面;
優點:產品使用者不需要關心產品類的建立過程,與具體產品的實現類達到解耦的效果;
缺點:違背"開放–封閉"原則(ocp),因為新增乙個產品類的時候,需要修改原先的工廠方法;
適用時機:當工廠類負責建立的物件比較少的時候;
下面舉例說明應用場景
小鞏要做乙個動物管理系統,要求對動物的屬性,日常生活記錄。
public
inte***ce
animal
public
class
dolphin
implements
animal
/*海豚會吃*/
public
void
eat()}
public
class
tiger
implements
animal
/*老虎會吃*/
public
void
eat(
)}
問題來了,建立老虎類的時候,要初始化很多變數,老虎的年齡,腿,是否生病等,這樣一來,客戶端需要加很多**。
解決方法:用乙個單獨的類來建立物件和初始化變數,客戶端只負責呼叫,職責清楚,**變短,利於維護。
public
class
samplefactory
}public
class
client
}
但是,當有新的動物加進來,需要修改原來的工廠類**,怎麼辦呢?
定義:工廠方法模式中抽象工廠負責定義建立物件的介面, 具體物件的建立工作由實現抽象工廠的具體工廠類來完成。
優點: 在工廠方法模式中,客戶端不再負責物件的建立,而是把這個責任交給了具體的工廠類,客戶端只負責物件的呼叫,明確了各個類的職責。 如果有新的產品加進來,只需要增加乙個具體的建立產品工廠類和具體的產品類,不會影響其他原有的**,後期維護更加容易,增強了系統的可擴充套件性。
缺點: 需要額外的編寫**,增加了工作量。
使用時機:適合比較複雜物件的建立。
//設計乙個只負責定義建立方式的抽象工廠類:
public
inte***ce
factory
//再分別設計老虎、海豚的具體工廠實現類,都繼承抽象工廠類:
public
class
trige***ctory
implements
factory
}public
class
dolphinfactory
implements
factory
}//客戶端呼叫:
public
class
client
}
定義:如果客戶端需要建立一些產品結構,而這些產品結構由分別屬於不同的產品類別,則可以使用抽象工廠模式,抽象工廠模式中的抽象工廠類負責定義建立物件的介面,而這一系列物件的建立工作由實現抽象工廠類的具體工廠類來完成。
原理:抽象工廠模式主要有四部分組成:抽象工廠類,實現抽象工廠類的具體實現類、抽象類和實現抽象類的具體實現類。
優點:在抽象工廠模式中,客戶端不再需要負責物件的建立,而是把這個責任交給了具體的工廠類,客戶端只負責對物件的呼叫,明確了各個類的職責。當一系列相互關聯的產品被設計到乙個工廠裡面後,客戶端的呼叫變得簡單,而且,更換這一列的產品時,只需要更換乙個工廠類即可。
缺點:如果有新的產品加進來,則需要修改抽象工廠類的設計,並同時修改實現這個抽象工廠類的具體實現類,需要額外編寫**,增加了工作量。
使用時機:當系統建立一系列相互關聯的物件時,就需要時用抽象工廠模式。
public
class
asiatriger
extends
triger
public
void
eat()}
public
class
africatriger
extends
triger
public
void
eat()}
public
class
africadolphin
extends
dolphin
public
class
africadophin
extends
dolphin
//然後設計乙個只負責定義建立方式的抽象工廠類:
public
inte***ce
factory
//再設計適合亞洲老虎,亞洲海豚的具體工廠類;
public
class
asiafactory
implements
factory
;public dolphin createdolphin()
;}//再設計適合非洲老虎,非洲海豚的具體工廠類;
public
class
africafactory
implements
factory
;public dolphin createdolphin()
;}public
class
client
}
設計模式應用場景
設計模式應用場景 1 command 建立和執行事務 實體上的解耦 時間上的解耦 undo方法 2 active object模式 該模式與command模式結合 實現多執行緒控制的一項古老的技術,為許多任務業系統提供了乙個簡單的多工核心。3 template method 與 strategy 分...
初窺設計模式 策略模式及相關應用場景
一直覺得設計模式是非常高階的東西,之前也簡單的了解過一些,但總是沒有找到合適的應用場景,所以也沒能深入的去理解他。直到最近在工作中,需要寫乙個聯絡歷史的功能,每個記錄後邊要顯示該條記錄是多久之前產生的。寫完的時候用了很多的if else來判斷,看起來很不優雅,請教了leader之後,給我指點了一下,...
設計模式的應用場景 6 外觀模式
定義 為對外提供一組介面的子系統提供乙個統一的介面,使得其他系統對該系統的訪問都通過這個統一的介面來完成。優點 通過統一對外介面訪問系統,避免了外部系統和子系統之間的直接聯絡從而降低了系統間的依賴和複雜度。缺點 限制了外部系統對子系統的靈活呼叫。使用時機 當乙個複雜的系統需要對外提供介面時,就需要將...