建立型設計模式總結

來源:互聯網
上載者:User

注意單件模式在多線程的問題。

Abstract Factory抽象工廠:
例子:遊戲中不同系列的設施建立(古典的,現代的...),但是對於系列中的對象(道路,房屋...這些是不變的,不

會需要增加一個“下水道”對象)簡單工廠的問題:--不能應對“不同系列對象”的變化,有了新的變化點。一系列相互依賴的對象

抽象工廠的缺點:難以應對“新對象”的需求變動,它只適用於“新系列”的需求變動。Abstract Factory模式和Factory Method模式結合,來應對“對象建立”的需求變化

Builder產生:
例子:遊戲中造房子,房子的各個部分千變萬化,這樣就可以造出各種各樣的房子。
“一個複雜物件”的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的

各個部分經常面臨著劇烈的變化,但是將他們組合在一起的演算法卻相對穩定。

意圖:將一個複雜物件的構建與其表示相分離,使得同樣的構建過程 可以建立 不同 的表示。

Builder模式主要在於應對“複雜物件各個部分”的頻繁需求變動,其缺點在於難以應付“構建演算法”的頻繁需求

變動。

Builder模式通常和Composite模式組合使用。

Factory MethodFactory 方法:
例子:造車,比如要造紅旗車,但是現在需求變了,需要造東風車。
“某個對象”的建立工作,由於需求的變化,這個對象經常面臨著劇烈的變化,但是它卻擁有比較穩定的介面

定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類,Factory Method使得一個類的執行個體化延遲到子類

Prototype原型:
例子:一個遊戲中需要多個Actor,這具體某個Actor可能會用到多個,所以採用“複製”,來建立多個具體的

Actor。
“某些結構複雜的對象”的建立工作,由於需求的變化,這些對象經常面臨著劇烈的變化,但是它們卻擁有比較穩

定一致的介面。使用原型執行個體指定建立對象的種類,然後通過拷貝這些原型來建立新的對象。

建立型模式總結

Singleton解決的是實體物件個數的問題,除了Singleton之外,其他建立型模式解決的都是new所帶來的耦合關係

Factory 方法模式(Factory Pattern)的用意是定義一個建立產品對象的工廠介面,將實際建立工作延遲到子類中去

,強調的是“單個對象”的變化。

抽象原廠模式(Abstract Factory)抽象工廠是所有原廠模式中最為抽象和最具有一般性的一種形態。抽象工廠可以向客戶提供一個介面,使得客戶可以在不必指定產品的具體類型的情況下,建立多個產品族中的產品對象,強調的是“系列對象”的變化。

產生器模式(Builder Pattern)把構造對象執行個體的邏輯移到了類的外部,在這個類的外部定義了這個類的構造邏

輯。他把一個複雜物件的構造過程從對象的表示中分離出來。其直接效果是將一個複雜的對象簡化為一個比較簡單

的目標對象。他強調的是產品的構造過程。

原型模式(Prototype Pattern)和原廠模式一樣,同樣對客戶隱藏了對象建立工作,但是,與通過對一個類進行

執行個體化來構造新對象不同的是,原型模式是通過拷貝一個現有對象產生新對象的。

Factory Method,Abstract Factory,Builder都需要一個額外的工廠類來負責執行個體化“易變對象”,而

Prototype則是通過原型(一個特殊的工廠類)來複製“易變對象”。

如何選擇使用建立型模式

考慮遊戲開發情境,假定在這個遊戲情境中我們使用到的有牆(Wall),屋子(Room),門(Door)幾個組件。在這個過程中,同樣是對象的建立問題,但是會根據所要解決的問題不同而使用不同的建立型模式。

如果在遊戲中,一個屋子只允許有一個門存在,那麼這就是一個使用Signleton模式的例子,確保只有一個Door類

的執行個體被建立。解決的是對象建立個數的問題。

 

在遊戲中需要建立牆,屋子的執行個體時,為了避免直接對構造器的調用而執行個體化類,這時就是Factory 方法模式了,每一

個組件都有它自己的工廠類。解決的是“單個對象”的需求變化問題。

 

在遊戲情境中,不可能只有一種牆或屋子,有可能有現代風格(Modern),古典風格(Classical)等多系列風格

的組件。這時就是一系列對象的建立問題了,是一個抽象工廠的例子。解決的是“系列對象”的需求變化問題。

 

如果在遊戲情境中,構成某一個情境的演算法比較穩定,例如:這個情境就是用四堵牆,一個屋子,一扇門來構成的

,但具體是用什麼風格的牆、屋子和門則是不停的變化的,這就是一個產生器模式的例子。解決的是“對象部分”

的需求變化問題。

 

如果在遊戲中,需要大量的古典風格或現代風格的牆或屋子,這時可以通過拷貝一個已有的原型對象來產生新對象

,就是一個原型模式的例子了。通過複製來解決“易變對象”的建立問題。

 

如果遇到“易變類”,起初的設計通常從Factory Method開始,當遇到更多的複雜變化時,可以考慮重構為其他三

種原廠模式。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.