設計模式學習(一)——工廠方法模式【Factory Method Pattern】

參考書——《HeadFirst設計模式》


(提醒:在設計模式中,所謂的“實現一個接口”,並不一定表示“寫一個類,並利用implements關鍵字來實現某個Java接口”。“實現一個接口”泛指:實現某個超類型(可以是類or接口)的某個方法)


工廠方法用來處理對象的創建,並將這樣的行爲分裝在子類中。這樣,客戶端程序中關於超類的代碼就和子類對象創建代碼解耦了。                            

                                                 

              abstract  Product factoryMethod (String Type) ;

              1.工廠方法是抽象的,所以依賴子類來處理對象的創建。

        2.工廠方法必須返回一個產品。超類中定義的方法,通常使用到工廠方法的返回值。

         3.工廠方法將客戶和實際創建具體產品的代碼分隔開來。

                           4.工廠方法可能需要(也可能不需要)參數來指定所要的產品


Factory Method Pattern 通過讓子類決定該創建的對象是什麼,來達到將對象創建的過程封裝的目的

正式定義:工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。

    抽象的創建者類(Creator)提供了一個創建對象的方法接口(也成爲“工廠方法”),在抽象的Creator中,任何其他實現的方法,都可能使用到這個工廠方法所生產出來的產品。但只有子類正真實現這個方法並生產產品。

    定義中的“決定”,並不是指模式允許子類本身在運行時做決定,而是指在編寫創建者類時,不需要知道實際創建的產品是哪一個,選擇了使用了哪個子類,自然就決定了實際創建的產品是哪一個。

Creator這個抽象類實現了所有操縱產品的方法,但不實現工廠方法。


來看下它的組成:

1)抽象工廠角色:這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的接口或者必須繼承的父類。在java中它由抽象類或者接口來實現。

2)具體工廠角色:它含有和具體業務邏輯有關的代碼。

3)抽象產品角色:它是具體產品繼承的父類或者是實現的接口。在java中一般有抽象類或者接口來實現。

4)具體產品角色:具體工廠角色所創建的對象就是此角色的實例。


    當你直接實例化一個對象時,就是在依賴它的具體類。


    這裏插入些依賴倒置的一些知識 依賴倒置——不能讓高層組件依賴低層組件,而且,不管是高層or低層組件,都應該依賴於抽象。所謂高層組件是由其他低層組件定義其行爲的類。


======================================================================================================

再補充下簡單工廠模式(因爲《HeadFirst設計模式》中沒有單獨來說),又稱靜態工廠方法模式(Static Factory MethodPattern)。

簡單工廠涉及到三個角色:

1. 工廠類角色:往往由一個具體的類實現。裏面的工廠方法和上面的抽象工廠角色的工廠方法不同:a.不是抽象的、b.用static修飾
2. 抽象產品角色
3. 具體的產品





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