設計模式之factory method

2021-06-07 00:59:45 字數 1396 閱讀 5059

在現實生活中,有很多東西都是作為附屬物出現的,如手機套附屬於手機,電腦膜附屬於電腦,我們很多時候都會把精力集中在主要物中,而忽略這些附屬物。物件導向程式設計能很好的反映現實中實際存在的物件以及關係,factory method設計模式是解決這樣的主從關係明顯的方法,能幫我們抓住主要重點。

factory method設計模式在uml類圖中如下表示

produce和creator都是抽象類,cteator提供建立produce類的介面,在子類concretecreator中實現,實現的createproduce會產生concreteproduce類。

舉乙個具體一點的例子吧!

假如produce是乙個手機套,我們要為每乙個手機生成乙個手機套與其搭配,但是我們的重點並不是在手機套上。我可以宣告下面的類。

/*class phonecover*/

class phonecover ;

/*class phone*/

class phone ;

private:

int m_color;

public:

void setcolor(int color)

};public:

};

也許這還沒有反映出factory method的優勢,試想一下,如果我們現在有一種新的型別手機,怎麼去處理呢?可以如下解決:

/*class htcphonecover*/

class htcphonecover: public phonecover

void setcolor(int color)

};/*class htcphone*/

class htcphone: public phone

};

這樣,我們就將手機套和手機繫結在一起了,我們的使用者在建立了手機之後,不至於要花時間去思索應該建立哪個手機套類,減少了使用者放錯的機會。

factory method還有另一種實現方法。

大家應該對動物餅乾比較熟悉吧,下面就以它為例

/*class biscuit*/

class biscuit;

/*class dogbiscuit*/

class dogbiscuit: public biscuit;

/*class catbiscuit*/

class catbiscuit: public biscuit;

enum biscuittype;

biscuit* createbiscuit(int type)

}

這樣,就可以根據不同引數,函式建立不同的餅乾。

設計模式之禪之設計模式 門面模式

1 package com.yeepay.sxf.template18 2 3 寫信的業務類 4 隱藏在門面角色裡邊,不需要暴露太多5 author sxf6 7 8public inte ce iletterprocess view code 寫信的業務類的實現 1 package com.yee...

設計模式之禪之設計模式 橋梁模式

1 package com.yeepay.sxf.template24 2 3 實現化角色 4 相當於不同的業務邏輯,抽象出共有行為5 6 產品類7 author sxf8 9 10 public abstract class product view code 房子產品實現 1 package c...

設計模式 設計模式之工廠模式

工廠方法模式 建立模式 使用場景?作用?形態?場景 大量類似的實體類 要建立的實體類都是同一本質的東西 披薩 有部分類似功能 準備 烘烤 切法 實現方式不一樣 準備的材料不同 烘烤時間不同 切法不同 將繁瑣複雜的建立類的過程聚集在一起,有序清晰 把具體例項化的過程從客戶 中抽離 作用 1 將建立物件...