注意單件模式在多執行緒的問題。
abstract factory抽象工廠:
例子:遊戲中不同系列的設施建立(古典的,現代的...),但是對於系列中的物件(道路,房屋...這些是不變的,不
會需要增加乙個「下水道」物件)簡單工廠的問題:--不能應對「不同系列物件」的變化,有了新的變化點。一系列相互依賴的物件
抽象工廠的缺點:難以應對「新物件」的需求變動,它只適用於「新系列」的需求變動。abstract factory模式和factory method模式結合,來應對「物件建立」的需求變化
builder生成:
例子:遊戲中造房子,房子的各個部分千變萬化,這樣就可以造出各種各樣的房子。
「乙個複雜物件」的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的
各個部分經常面臨著劇烈的變化,但是將他們組合在一起的演算法卻相對穩定。
意圖:將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程 可以建立 不同 的表示。
builder模式主要在於應對「複雜物件各個部分」的頻繁需求變動,其缺點在於難以應付「構建演算法」的頻繁需求
變動。builder模式通常和composite模式組合使用。
factory method工廠方法:
例子:造車,比如要造紅旗車,但是現在需求變了,需要造東風車。
「某個物件」的建立工作,由於需求的變化,這個物件經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,factory method使得乙個類的例項化延遲到子類
prototype原型:
例子:乙個遊戲中需要多個actor,這具體某個actor可能會用到多個,所以採用「轉殖」,來建立多個具體的
actor。
「某些結構複雜的物件」的建立工作,由於需求的變化,這些物件經常面臨著劇烈的變化,但是它們卻擁有比較穩
定一致的介面。使用原型例項指定建立物件的種類,然後通過拷貝這些原型來建立新的物件。
建立型模式總結:
singleton解決的是實體物件個數的問題,除了singleton之外,其他建立型模式解決的都是new所帶來的耦合關係
工廠方法模式(factory pattern)的用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中去
,強調的是「單個物件」的變化。
抽象工廠模式(abstract factory)抽象工廠是所有工廠模式中最為抽象和最具有一般性的一種形態。抽象工廠可以向客戶提供乙個介面,使得客戶可以在不必指定產品的具體型別的情況下,建立多個產品族中的產品物件,強調的是「系列物件」的變化。
生成器模式(builder pattern)把構造物件例項的邏輯移到了類的外部,在這個類的外部定義了這個類的構造邏
輯。他把乙個複雜物件的構造過程從物件的表示中分離出來。其直接效果是將乙個複雜的物件簡化為乙個比較簡單
的目標物件。他強調的是產品的構造過程。
原型模式(prototype pattern)和工廠模式一樣,同樣對客戶隱藏了物件建立工作,但是,與通過對乙個類進行
例項化來構造新物件不同的是,原型模式是通過拷貝乙個現有物件生成新物件的。
factory method,abstract factory,builder都需要乙個額外的工廠類來負責例項化「易變物件」,而
prototype則是通過原型(乙個特殊的工廠類)來轉殖「易變物件」。
如何選擇使用建立型模式
考慮遊戲開發場景,假定在這個遊戲場景中我們使用到的有牆(wall),屋子(room),門(door)幾個部件。在這個過程中,同樣是物件的建立問題,但是會根據所要解決的問題不同而使用不同的建立型模式。
如果在遊戲中,乙個屋子只允許有乙個門存在,那麼這就是乙個使用signleton模式的例子,確保只有乙個door類
的例項被建立。解決的是物件建立個數的問題。
在遊戲中需要建立牆,屋子的例項時,為了避免直接對構造器的呼叫而例項化類,這時就是工廠方法模式了,每一
個部件都有它自己的工廠類。解決的是「單個物件」的需求變化問題。
在遊戲場景中,不可能只有一種牆或屋子,有可能有現代風格(modern),古典風格(classical)等多系列風格
的部件。這時就是一系列物件的建立問題了,是乙個抽象工廠的例子。解決的是「系列物件」的需求變化問題。
如果在遊戲場景中,構成某乙個場景的演算法比較穩定,例如:這個場景就是用四堵牆,乙個屋子,一扇門來構成的
,但具體是用什麼風格的牆、屋子和門則是不停的變化的,這就是乙個生成器模式的例子。解決的是「物件部分」
的需求變化問題。
如果在遊戲中,需要大量的古典風格或現代風格的牆或屋子,這時可以通過拷貝乙個已有的原型物件來生成新物件
,就是乙個原型模式的例子了。通過轉殖來解決「易變物件」的建立問題。
如果遇到「易變類」,起初的設計通常從factory method開始,當遇到更多的複雜變化時,可以考慮重構為其他三
種工廠模式。
設計模式 建立型總結
factory 問題 1.為了提高內聚 cohesion 和松耦合 coupling 經常會抽象出一些類的公共介面以形成抽象基類或介面 可以通過宣告乙個向基類的指標來指向實際的子類實現 達到多型目的 1 客戶程式設計師必須知道實際子類的名稱 2 程式的擴充套件性和維護變得越來越困難 2.在父類中並不...
白話設計模式 建立型設計模式總結
到今天為止把建立型的幾種設計模式算是學完了,搞一段落.進行一下總結.時間比較短,還好建立型的比較簡單,以後估計不會這麼順利了.由於沒有真正的實踐在專案中,所以到現在為止,我認為我還沒有掌握,僅僅是對設計模式有些了解而已.建立型模式,主要用來解決new所帶來的物件間的耦合關係,除了singleton和...
建立型設計模式
建立型設計模式對類的建立例項化過程進行抽象,將物件的建立和物件的使用分離。簡單工廠模式 使用頻率4星 工廠方法模式 使用頻率5星 抽象工廠模式 使用頻率5星 建造者模式 使用頻率2星 原型模式 使用頻率3星 單例模式 使用頻率4星 toc 簡單工廠模式將物件建立和物件使用相分離,降低了系統耦合度。優...