學習日記之抽象工廠模式和Effective C++

抽象工廠模式(Abstract Factory):提供一個創建一系列相關或者相互依賴對象的接口,而無需制定他們具體的類。

(1),工廠方法模式是定義一個用於創建對象的接口,讓子類決定實例化哪一個類。

(2),爲創建不同的產品對象,客戶端應使用不同的具體工廠。


抽象工廠模式的優點和缺點:

(1),好處是便於交換產品系列,由於具體工廠類在一個應用中只需要在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置。

(2),它讓具體的創建實例過程和客戶端分離,客戶端是通過他們的抽象接口操縱實例,產品的具體類名也被具體工廠的實現分離,不會出現在客戶端代碼中。

(3),用簡單工廠可以改進抽象工廠。

(4),用反射+抽象工廠的數據訪問程序。

(5),用反射+配置文件實現數據訪問程序。

(6),所有在用簡單工廠的地方,都可以考慮用反射技術來去除 switch 或 if,解除分支判斷帶來的耦合。


Effective C++:

1:轉型操作符。

(1),const_cast 通常用來將對象的常量性去掉(cast away the constness )。它也是唯一有此能力的 C++-style 轉型操作符。

(2),dynamic_cast 主要用來轉型“安全向下轉型” (safe downcasting),也就是用來決定某對象是否歸屬繼承體系的某個類型。它是唯一無法用舊式語法執行的動作,也是唯一肯呢過耗費重大運行成本的轉型動作。

(3),reinterpret_cast 意圖執行低級轉型,實際動作以及結果可能取決於編譯器,這也就表示它不可移植。例如講一個 pointer to int 轉型爲 一個 int。這一類轉型在第幾代碼以外很少見。

(4),static_cast 用來強迫隱式轉換(implicit conversions),例如將 non-const 對象轉爲 const 對象,或將 int 轉爲 double 等等。它也可以用來執行上述多種轉換的反向轉換,例如將 void* 指針轉爲 typed 指針,將 pointer-to-base 轉爲 pointer-to-derived。但它違法將 const 轉爲 non-const。


2:儘量少做轉型動作

(1),如果可以,儘量避免轉型,特別是在注重效率的代碼中避免dynamic_casts。如果這個設計需要轉型動作,試着發展無需轉型的替代設計。

(2),如果轉型是必要的,試着將它隱藏於某個函數背後。客戶隨後可以調用該函數,而不需將轉型放進他們自己的代碼內。

(3),寧可使用 C++-style 轉型,不要使用舊式轉型。前者很容易辨識出來,而且有着比較憤懣別類的執掌。


3:避免返回 handles 指向對象內部成分

(1),避免返回 handles (包括 references、指針、迭代器)指向對象內部。遵守這個條款可增加封裝性,幫助 const 成員函數的行爲像個 const,並將發生“虛吊號碼牌”(dangling handles)的可能性降到最低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章