設計模式(十二)—— Factory Method 模式

理解:

       當我們有一個類,他有多個派生類;該類中有一個對象,有多種實現方式。在該類中,我們需要使用該對象的方法,但實例化該對象是由不同的派生類確定的(象棋棋盤中是象棋對象,五子棋棋盤中是五子棋對象),因此,我們在父類中不能夠進行初始化,只能夠將其初始化延遲到子類當中。

實現方式是通過一個protected的createXXX()函數,讓子類重寫,以獲得相應的實例化對象。


價值:

使得我們能夠在不知道對象的具體形式的情況下,能夠進行調用,可以在父類中封裝一些流程。

否則,我們可能需要在父類中進行if-else 或者switch ,來進行對象的實例化。這樣的話,父類必須要知道子類的信息,才能進行,使得耦合變大。

與抽象工廠對比:

抽象工廠,主要用於將對象從new的創建方式中脫離出來,使得對象的創建與使用分離開來,這樣,對象要使用其他具體類進行實例化時,不會影響到使用對象的代碼。

工廠模式,主要用於讓類中的對象的實例化延遲到子類當中,以實現對象方法調用時的多肽效果。

因此,抽象工廠主要是提供外界使用的,讓外接調用其創建對象的方法並隱藏其實現;而工廠方法主要是內部的實現方式,使用protected函數讓子類重寫創建對象的方法。用戶可以知道是否使用了抽象工廠模式,而不會輕易知道是否使用了工廠模式。

因此,抽象工廠其名曰抽象,抽象往往是提供外界一個抽象類或者接口來定義其能夠調用的方法,也意味着外界可以更清楚其方式了。


與模板方法對比:

模板方法中,也是在實現延遲到子類,使用protected的函數。但模板方法中,在父類中定義了函數調用方式、順序,讓子類來對其中的一些函數進行實現。

而工廠模式中,僅是將對象的創建延遲到子類中,同時他並沒有相應的“模板”,因此,還是有一定的差別的。


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