設計模式(6) - 創建型模式總結

創建對象最直接的方法就是利用C++提供的構造函數,這種方法的缺點是讓代碼綁定了具體的類型;一旦該具體類型需要被替換爲新的類型,那麼程序邏輯就不得不修改;更糟糕的是,可能需要到處修改這樣的代碼。Open/Close原則的一個要旨是要避免這種修改!如前所述,所有的創建型設計模式解決這個問題的方案都是:基於一個穩定的接口來創建對象。

  • 工廠方法模式定義一個抽象接口,由該接口的子類來決定所創建對象的具體類型;
  • 原型模式調用Clone()接口來複制一個已經存在的對象;
  • 抽象工廠模式則是在工廠方法模式或者原型模式的基礎上,進一步隱藏相關類型的相關性;
  • Builer模式中Director對象本質上是調用一個模板方法來構造複雜對象,該模板方法隱藏了複雜對象子部件的抽象類型;相同的一個構造過程,能夠產生不同的子部件組合;
  • 單件模式向客戶隱藏了類的構造函數,但提供一個公開的接口來獲取一個實例;該模式向客戶隱藏了唯一實例的事實。 

進一步比較這些接口定義,我們發現,這些接口的抽象程度是逐步加強提高的:

  • 單件模式返回了對象的具體類型
  • 工廠方法模式返回了對象的抽象類型
  • 抽象工廠模式如果由工廠方法模式來構建,則返回子部件的抽象類型;如果由原型模式來實現,則可以隱藏子部件的抽象類型
  • 原型模式的Clone()接口由於其通用性,隱藏了對象的抽象類型
  • Builder模式完全隱藏子部件的類型

雖然這些模式都是基於接口來創建對象,這些模式的關注點和價值也不盡相同的,總結如下:

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