目的分類
物件建立型模式
範圍準則
類(該模式處理類和子類之間的關係,這些關係通過繼承建立,是靜態的,在編譯時刻便確定下來了)
主要功能
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類
適用情況
當乙個類不知道它所必須建立的物件的類的時候
當乙個類希望由它的子類來指定它所建立的物件的時候
當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是**者這一資訊區域性化的時候參與部分
參與部分
product:定義工廠方法所建立的物件的介面
concreteproduct:實現product介面
creator:宣告工廠方法,該方法返回乙個product型別的物件。creator也可以定義乙個工廠方法的預設實現,它返回乙個預設的concreteproduct物件;可以呼叫工廠方法以建立乙個product物件
concreteproduct:重定義工廠方法以返回乙個concreteproduct例項
協作過程
creator依賴於它的子類來定義工廠方法,所以它返回乙個適當的concreteproduct例項
uml圖例
factory method
示例分析 - 強大的**工坊
時の魔導士仔細思考了一番,決定先建造一座充滿魔法的weaponfactory,通過引入factory method,以使得其具體的子類可以選擇這些構件,裝配出一套適合thewarrior的**。我們來看一下這個示例:
複製**
1 class weaponfactory
7 }8 9 void weaponfactory::getweapon(weaponsuite* suite)
複製**
於是我們可以引入乙個名為『戰士的榮耀』的長劍工廠(kimi: 是不是很酷!……):
1 class honoroffighter : public weaponfactory
5 }或者乙個名為『衛士的信仰』的盾牌工廠,等等等等:
1 class bliefofdefender : public weaponfactory
5 }為了更清楚地表示上面所說的模型,讓我們來看看uml圖:
factory method demo
哈哈,這下勇敢的霍位元人就能通過拜訪不同的工廠來自由獲取自己的戰鬥**了。
特點總結
我們來總結下工廠方法模式的特點:
工廠方法不再將與特定應用有關的類繫結到我們的**中。**僅處理product介面;因此它可以與使用者定義的任何concreteproduct類一起使用。
為子類提供掛鉤(hook)。用工廠方法在乙個類的內部建立物件通常比直接建立物件更靈活。
潛在缺點在於我們可能僅僅為了建立乙個特定的concreteproduct物件,就不得不建立creator的子類。
當然,如我最早的筆記中所說,設計模式固然重要,但絕不可照本宣科。不同的設計模式之間往往存在著相互依賴,相輔相成的微妙關係。正如前篇中的abstract factory,通常會使用factory method來實現,當然也可以用prototype,只是我們暫時還沒有涉及。
抽象工廠模式和工廠方法模式從設計模式的角度來講,的確是存在差異的。但是在我的這兩篇筆記中,有的朋友可能會覺得我的示例中都同時存在著抽象工廠模式和工廠方法模式。沒錯,但是請還是根據文章的內容,辯證地來看待。
Java設計模式 抽象工廠模式(factory)
目錄目的 應用例項 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。工廠模式是最常用的設計模式之一。這種型別的設計模式輸出建立型模式,提供了一種建立物件的最佳方式。在工廠模式中建立物件是通過使用乙個共同 的介面來指向新建立的物件。乙個框架或者系統要由多個子工具系列的乙個工具來配置...
學習筆記之設計模式
設計模式 模式是一種解決問題的思路,它已經適應了一種實踐環境,並且可以使用其他環境 用牛耕地,打井取水 特點在特定場景下有重用性,對相同型別不同問題的環境,其解決方案都有效可傳授性,就是問題出現的機會很多解決問題的方案相同,人們相對可以接受有表示模式的名稱優點 重用設計 系統容易重構 節省時間 五個...
設計模式之State模式 學習筆記
定義 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。意圖 允許乙個物件在其內部狀態改變時改變它的行為 適用場景 1.乙個物件的行為取...