設計模式之工廠模式 二 之工廠方法模式

2021-08-04 07:26:59 字數 3020 閱讀 8269

簡單工廠模式有乙個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到工廠方法模式,建立乙個工廠介面和建立多個工廠實現類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的**。

工廠方法模式(factory method pattern)同樣屬於類的建立型模式又被稱為多型工廠模式(polymorphic) 。工廠方法模式的意義是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

工廠方法模式中包含的角色及其相應的職責如下:

抽象工廠(creator)角色:工廠方法模式的核心,任何工廠類都必須實現這個介面。

具體工廠( concrete creator)角色 : 具體工廠類是抽象工廠的乙個實現,負責例項化

產品物件。

抽象(product)產品角色:簡單工廠模式所建立的所有物件的父類,注意,這裡的父類可以是介面也可以是抽象類,它負責描述所有例項所共有的公共介面。

具體產品(concrete product)角色:簡單工廠所建立的具體例項物件,這些具體的產品往往都擁有共同的父類。

後續補充uml類圖。

簡單工廠模式使用乙個類負責所有產品的建立,雖然使得客服端和服務端相互分離,使得客服端不用關心產品的具體建立過程,客戶端唯一所要做的就是呼叫簡單工廠的靜態方法獲得想要的產品即可。但是,簡單工廠模式違背了嚴格意義上的「開放封閉原則」,這就使得一旦有乙個新的產品增加就必須修改工廠類的源**,從而將新的產品的建立邏輯加入簡單工廠中供客戶端呼叫。

工廠方法法模式正是在簡單工廠模式的基礎上進一步抽象而來的 。由於工廠方法法模式的核心是抽象工廠角色,使用了物件導向的多型性,這就使得工廠方法法模式即保持了簡單工廠模式的優點,又克服了簡單工廠模式違背「開放封閉原則」的缺點。工廠方法法模式中核心工廠類不再提供所有的產品的建立工作,而是將具體的產品建立工作交給了子類去做。這時候的核心工廠類做什麼呢?做標準!核心工廠類只需要負責制定

具體工廠需要實現的介面即可,至於具體的工作就留給了子類去建立了。

1、建立乙個抽象產品的介面

package com.zd.factoryt;

/** * 建立乙個抽象產品的介面

*@author administrator

* */

public

inte***ce

shape

2、建立實現抽象產品介面的具體產品實體類

package com.zd.factoryt;

public

class

circle

implements

shape

}

package com.zd.factoryt;

public

class

rectangle

implements

shape

}

package com.zd.factoryt;

public

class

square

implements

shape

}

3、建立抽象工廠類介面

package com.zd.factoryt;

/** * 建立乙個抽象工廠的介面

*@author administrator

* */

public

inte***ce

shapefractory

4、建立實現抽象工廠介面的具體工廠實體類

package com.zd.factoryt;

public

class

circlefactory

implements

shapefractory

}

package com.zd.factoryt;

public

class

rectanglefactory

implements

shapefractory

}

package com.zd.factoryt;

public

class

squrefactory

implements

shapefractory

}

5、建立測試客戶端類

package com.zd.factoryt;

/** * 簡單工廠模式測試客戶端

*@author administrator

*使用該工廠,通過傳遞型別資訊來獲取實體類的物件。

*/public

class

testfactory

}

6、測試效果

我是乙個正方形

我是乙個長方形

我是乙個圓形

優點:工廠方法類的核心是乙個抽象工廠類,所有具體的工廠類都必須實現這個介面 。當系統擴充套件需要新增新的產品物件時,僅僅需要新增乙個具體物件以及乙個具體工廠物件 ,原有工廠物件不需要進行任何修改,也不需要修改客戶端,這就很好的符合了「開放-封閉 」原則。

缺點:使用工廠方法模式的時候,客戶端需要決定例項化哪乙個具體的工廠。也就是說工廠方法法模式把簡單工廠模式的內部判斷邏輯轉移到了客戶端**。而且使用該模式需要增加額外的**,這就導致工作量的增加。

工廠方法模式解決的是同一系列的產品的建立問題,而且很好的滿足了「開放封閉原則」,這需要建立同一系列產品的時候,使用工廠方法模式往往比使用簡單工廠模式更好,尤其是對大型複雜的系統而言。

設計模式 工廠模式之工廠方法模式

工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...

設計模式之工廠方法(二)

工廠方法定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到子類。簡單工廠vs工廠方法 簡單工廠最大的優點在於工廠類包含了必要的邏輯判斷,根據客戶端的選擇條件動態的例項化相關的類,對於客戶端而言,去除了與具體產品的依賴。工廠方法實現時,客戶端需要決定例項化哪乙個工廠來...

工廠模式之工廠方法模式

工廠方法模式 factory method pattern 是指定義乙個建立物件的工廠介面,但讓實現這個介面的類來決定例項化哪個類工廠方法讓類的例項化推遲到子類中進行。在工廠方法模式中使用者只需要關心所需產品對應的工廠,無須關心建立細節,而且加入新的產品符合開閉原則,並且每個工廠只能建立自己的產品,...