常用設計模式 建立型

2021-09-07 09:38:55 字數 2625 閱讀 1391

一:簡單工廠模式

適用情況:乙個基類有很多個子類,在程式中可能會在不同情況下需要使用到不同的子類。傳統做法是用條件語句在相應條件下顯式呼叫子類的建構函式來建立乙個子類物件來進行操作。這樣有個弊端就是一旦子類多起來就很麻煩,要建立很多子類物件,容易搞混。並且所以建立、呼叫都要顯式進行,很繁瑣。

這個時候,就可以用簡單工廠模式來進行對多情況下返回不同子類物件、用乙個父類指標管理多個子類物件的簡便操作。

模式實現:

首先,定義乙個基類(抽象類)以及其中的抽象方法們;

然後,定義一系列子類實現基類以及方法;

最後,定義乙個工廠類,在工廠類中定義乙個工廠方法,該方法接收乙個引數,依據引數的不同return不同的子類物件:return new subclass();

而在其他類、方法中,只能操作工廠類的工廠方法來獲得相應物件並呼叫方法,對子類的具體實現是不可見的。並且,是用乙個父類指標來接收相應的物件來操作。可以在不同情況下呼叫工廠方法更改指標所指的子類物件。從而實現乙個指標變數管理不同情況下的子類的目的。

uml圖:

二:工廠方法模式

簡單工廠模式的最大不足在於,工廠類負責一切子類的建立,一旦有新的子類新增,則要相應修改工廠類、工廠方法。違背了「開閉原則」(開閉原則:可以對外擴充套件,但不能被外面的變化引起內部修改)。

解決方法就是工廠方法模式:

在工廠方法模式中,工廠父類負責定義建立產品物件的公共介面,而工廠子類則負責生成具體的產品物件。這樣做的目的是將產品類的例項化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應該例項化哪乙個具體產品類。

即:抽象的工廠基類中定義了抽象的工廠方法;

然後為每個產品子類定義相應的具體工廠,如工廠子類a專門負責返回產品子類a;

在應用時,使用乙個工廠基類指標指向具體的工廠例項呼叫get()方法得到具體的產品;

這樣,一旦有新產品新增,只需要增加乙個工廠子類即可,而不需要修改任何地方。

uml圖:

三:建造者模式

使用情況:

乙個類中的成員有對其他類的引用,並且在不同情況下引用的類是不同的子類。我們稱這個類是有不同部件類構成的,並且部件類隨情況的不同而不同。

這種情況下,如果為每種情況定義乙個具體的子類,情況多起來的話就要定義很多很多類了,十分麻煩。這個時候,可以使用建造者模式。

建造者模式侷限:各個產品的部件類不能有太大的差別,產品內部不能太複雜,不然需要定義很多適應不同情況的建造者,造成臃腫。

抽象建造者:定義了建造者們需要對那些部件進行建造操作,即定義針對各個部件類的build()方法,乙個方法返回乙個部件類;

具體建造者:

針對不同的產品,每個產品對應乙個建造者,在其中實現了各部件的build()方法獲取明確的部件子類,最後組裝出乙個具體的產品類,通過方法返回出去;

指揮者:這個是使用者唯一可見的類,指揮者包含乙個建造者父類指標、乙個製造方法。使用者通過指揮者物件,指定具體的建造者物件(構造方法指定、setbuilder(builder)指定),然後製造方法中依次呼叫建造者的buildx()方法來指定產品的各個部件,最後return builder.getproduct();把乙個建造好的產品返回。

四:單例模式

在某些情況下,乙個類只能擁有乙個例項物件存在,比如:印表機物件,在某一時刻只能有一台印表機工作,所以只需要乙個印表機物件就夠了。在需要列印時,先向系統請求印表機,系統檢查印表機物件是否存在,有則把這個印表機物件返回給你用。沒有,則新建乙個印表機給你,同時把這個印表機儲存起來,下次申請使用時直接把這個印表機物件返回給你。

類似於這種只需要乙個類物件的情況下,我們使用單例模式。

由於單例類的成員是靜態私有的,所以不能通過 類名或物件名.成員 的形式訪問到,而只能通過公有的靜態函式getxx()來訪問到該例項成員。而且該例項成員是靜態的,所以只會有乙個。於是,無論你在外面建立了多少個singleton 變數,都只能通過getintance()方法來獲得具體物件,而這些物件都是同乙個。

建立型設計模式

建立型設計模式對類的建立例項化過程進行抽象,將物件的建立和物件的使用分離。簡單工廠模式 使用頻率4星 工廠方法模式 使用頻率5星 抽象工廠模式 使用頻率5星 建造者模式 使用頻率2星 原型模式 使用頻率3星 單例模式 使用頻率4星 toc 簡單工廠模式將物件建立和物件使用相分離,降低了系統耦合度。優...

建立型設計模式

設計模式分為總的來說分為三大類 建立型模式 五種,工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式 結構型模式 七種,介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式 行為模式 十一種,策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模式 狀...

建立型 設計模式

單例 單例項,自我例項化,提供全域性訪問點 工廠 不同型別例項由不同工廠建立,當然也有通過乙個靜態方法建立一種例項或通過傳入引數決定生產的例項 這兩種很明顯不方便擴充套件,需修改 抽象工廠 考慮物件有不同維度 如車有型別和顏色 那麼工廠負責產生一類產品 如工廠產生紅車,白車,黑車 那麼型別上可以通過...