Factory——工廠方法

 一、定義

        GOF上對工廠方法的意圖如此描述:定義一個用於創建對象的接口,讓子類決定實例化哪個類。Factory Method使一個類的實例化延遲到其子類。

         作爲類的開發者,我們通常會在類中提供構造器方法以便客戶代碼實例化該類。然而有時候,客戶代碼並不清楚該對幾個類中的哪一類進行實例化。可以用工廠模式定義一個用於創建對象的接口,同時控制對哪個類進行的實例化。


二、應用場景

         工廠方法模式的特徵是:

         (1)方法創建了一個新的對象;

         (2)方法的返回類型爲一個抽象類或接口;

         (3)有若干個類實現了上述抽象類型。

       

三、類圖


                             

四、例子

       (1)工廠方法最典型的一個例子就是在迭代器模式中的應用,這裏的工廠方法鏈接了兩個平行的類層次結構。

        當一個類將它的一些職責委託給一個獨立的類時,就產生了平行類層次。迭代器模式中,各個組合類型將遍歷元素的操作獨立出

來,形成了迭代器類層次。

        每個組合類型都和一個相應類型的迭代器對應。組合類的對象需要實例化對應自己的迭代器(通過CreateIterator方法),這裏的

CreateIterator方法就是工廠方法。 具體代碼可以看之前的迭代器模式日誌

      (2)工廠方法還能爲子類提供hook,用工廠方法在一個類的內部創建對象通常比直接創建對象更爲靈活。

        GOF的代碼示例裏利用了MazeGame的例子,基類提供了Maze,Room,Wall等的工廠方法默認實現。子類通過重載這些方法,

可以利用createMaze方法創建帶有炸彈的迷宮。這樣更有靈活性,由子類決定實例化哪個類型的迷宮組件。

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