軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性:封裝、繼承、多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c++寫了個小例子,加深一下理解。主要參考《大話設計模式》和《設計模式:可復用物件導向軟體的基礎》兩本書。本文介紹工廠模式的實現。
工廠模式屬於建立型模式,大致可以分為三類,簡單工廠模式、工廠方法模式、抽象工廠模式。聽上去差不多,都是工廠模式。下面乙個個介紹,首先介紹簡單工廠模式,它的主要特點是需要在工廠類中做判斷,從而創造相應的產品。當增加新的產品時,就需要修改工廠類。有點抽象,舉個例子就明白了。有一家生產處理器核的廠家,它只有乙個工廠,能夠生產兩種型號的處理器核。客戶需要什麼樣的處理器核,一定要顯示地告訴生產工廠。下面給出一種實現方案。
簡單工廠模式:
enumctype ;
class
singlecore
;
//單核a
class singlecorea: public
singlecore
};
//單核b
class singlecoreb: public
singlecore
};
//唯一的工廠,可以生產兩種型號的處理器核,在內部判斷
class
factory
};
這樣設計的主要缺點之前也提到過,就是要增加新的核型別時,就需要修改工廠類。這就違反了開放封閉原則:軟體實體(類、模組、函式)可以擴充套件,但是不可修改。於是,工廠方法模式出現了。所謂工廠方法模式,是指定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使乙個類的例項化延遲到其子類。
聽起來很抽象,還是以剛才的例子解釋。這家生產處理器核的產家賺了不少錢,於是決定再開設乙個工廠專門用來生產b型號的單核,而原來的工廠專門用來生產a型號的單核。這時,客戶要做的是找好工廠,比如要a型號的核,就找a工廠要;否則找b工廠要,不再需要告訴工廠具體要什麼型號的處理器核了。下面給出乙個實現方案。
工廠方法模式:
classsinglecore
;
//單核a
class singlecorea: public
singlecore
};
//單核b
class singlecoreb: public
singlecore
};
class
factory
;
//生產a核的工廠
class factorya: public
factory
};
//生產b核的工廠
class factoryb: public
factory
};
工廠方法模式也有缺點,每增加一種產品,就需要增加乙個物件的工廠。如果這家公司發展迅速,推出了很多新的處理器核,那麼就要開設相應的新工廠。在c++實現中,就是要定義乙個個的工廠類。顯然,相比簡單工廠模式,工廠方法模式需要更多的類定義。
既然有了簡單工廠模式和工廠方法模式,為什麼還要有抽象工廠模式呢?它到底有什麼作用呢?還是舉這個例子,這家公司的技術不斷進步,不僅可以生產單核處理器,也能生產多核處理器。現在簡單工廠模式和工廠方法模式都鞭長莫及。抽象工廠模式登場了。它的定義為提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。具體這樣應用,這家公司還是開設兩個工廠,乙個專門用來生產a型號的單核多核處理器,而另乙個工廠專門用來生產b型號的單核多核處理器,下面給出實現的**。
抽象工廠模式:
//單核
class
singlecore
;
class singlecorea: public
singlecore
};
class singlecoreb :public
singlecore
};
//多核
class
multicore
;
class multicorea : public
multicore
};
class multicoreb : public
multicore
};
//工廠
class
corefactory
;
//工廠a,專門用來生產a型號的處理器
class factorya :public
corefactory
multicore* createmulticore()
};
//工廠b,專門用來生產b型號的處理器
class factoryb : public
corefactory
multicore* createmulticore()
};
設計模式C 實現 工廠模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
設計模式C 實現(1) 工廠模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
設計模式C 實現(1) 工廠模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...