1. 程式人生 > >C++設計模式(一)——建立型模式

C++設計模式(一)——建立型模式

     設計模式指導我們怎樣去建立、維護、分配面向物件系統中的實體類, 以獲得高內聚、低耦合的面向物件系統,從而提高系統的可維護性和可複用性。設計模式是OO的一些設計思想的一個總結(但不是全部),因此設計模式和OO的設計原則經驗沒有矛盾,而是殊途同歸。

一、建立型模式

1、Factory模式

        Factory模式的兩個最重要的功能:

      1)定義建立物件的介面,封裝了物件的建立;

     

2)使得具體化類的工作延遲到了子類中。

2AbstractFactory模式

AbstractFactory模式關鍵就是將這一組物件的建立封裝到一個用於建立物件的類(ConcreteFactory)中,維護這樣一個建立類總比維護n多相關物件的建立過程要簡單的多。

AbstractFactory模式是為建立一組(有多類)相關或依賴的物件提供建立介面,而Factory模式正如我在相應的文件中分析的是為一類物件提供建立介面或延遲物件的建立到子類中實現。並且可以看到,AbstractFactory模式通常都是使用Factory模式實現(ConcreteFactory1)。

3Singleton模式

Singleton模式解決問題十分常見,我們怎樣去建立一個唯一的變數(物件)?

通過維護一個static的成員變數來記錄這個唯一的物件例項。通過提供一個staitc的介面instance來獲得這個唯一的例項。

4Builder模式

當我們要建立的物件很複雜的時候(通常是由很多其他的物件組合而成),我們要要複雜物件的建立過程和這個物件的表示(展示)分離開來,這樣做的好處就是通過一步步的進行復雜物件的構建,由於在每一步的構造過程中可以引入引數,使得經過相同的步驟建立最後得到的物件的展示不一樣。

5Prototype

模式

Prototype模式也正是提供了自我複製的功能,就是說新物件的建立可以通過已有物件進行建立。

其關鍵就是(C++中)拷貝建構函式的實現方式,這也是C++實現技術層面上的事情。由於在示例程式碼中不涉及到深層拷貝(主要指有指標、複合物件的情況),因此我們通過編譯器提供的預設的拷貝建構函式(按位拷貝)的方式進行實現。說明的是這一切只是為了實現簡單起見,也因為本文件的重點不在拷貝建構函式的實現技術,而在Prototype模式本身的思想。

 

*Prototype模式和Builder模式、AbstractFactory模式都是通過一個類(物件例項)來專門負責物件的建立工作(工廠物件),它們之間的區別是:Builder模式重在複雜物件的一步步建立(並不直接返回物件),AbstractFactory模式重在產生多個相互依賴類的物件,而Prototype模式重在從自身複製自己建立新類。