在現實生活中,有很多東西都是作為附屬物出現的,如手機套附屬於手機,電腦膜附屬於電腦,我們很多時候都會把精力集中在主要物中,而忽略這些附屬物。物件導向程式設計能很好的反映現實中實際存在的物件以及關係,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 將建立物件...