建立型設計模式總結

2021-04-13 06:55:59 字數 2589 閱讀 1465

注意單件模式在多執行緒的問題。

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 簡單工廠模式將物件建立和物件使用相分離,降低了系統耦合度。優...