工廠方法模式
抽象工廠模式
工廠模式是最常用的一種建立型設計模式。包括抽象工廠模式、工廠方法模式和簡單工廠模式。其中簡單工廠模式是最簡單的一種。
簡單工廠模式(****** factory pattern):定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有共同的父類。
因為在簡單工廠模式中用於建立例項的方法是靜態(static)方法,因此簡單工廠模式又被稱為靜態工廠方法(static factory method)模式,它屬於類建立型模式,但不屬於gof23種設計模式。
factory(工廠角色):工廠角色即工廠類,它是簡單工廠模式的核心,負責實現建立所有產品例項的內部邏輯;工廠類可以被外界直接呼叫,建立所需的產品物件;在工廠類中提供了靜態的工廠方法factorymethod(),它的返回型別為抽象產品型別product
product(抽象產品角色):它是工廠類所建立的所有物件的父類,封裝了各種產品物件的公有方法,它的引入將提高系統的靈活性,使得在工廠類中只需定義乙個通用的工廠方法,因為所有建立的具體產品物件都是其子類物件。
concreteproduct(具體產品角色):它是簡單工廠模式的建立目標,所有被建立的物件都充當這個角色的某個具體類的例項。每乙個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中宣告的抽象方法
在簡單工廠模式中,客戶端通過工廠類來建立乙個產品類的例項,而無須直接使用new關鍵字來建立物件,它是工廠模式家族中最簡單的一員
inte***ce
product
class
concreteproduct1
implements
product
class
concreteproduct2
implements
product
class
concreteproduct3
implements
product
class
factory
else
if(type ==2)
else
if(type ==3)
return null;}}
public
class
******factory
}
簡單工廠把例項化的操作單獨放到乙個類中,這個類就成為簡單工廠類,讓簡單工廠類來決定應該用哪個具體子類來例項化。
這樣做能把客戶類和具體子類的實現解耦
,客戶類不再需要知道有哪些子類以及應當例項化哪個子類。客戶類往往有多個,如果不使用簡單工廠,那麼所有的客戶類都要知道所有子類的細節。而且一旦子類發生改變,例如增加子類,那麼所有的客戶類都要進行修改。
簡單工廠模式的缺點是增加新產品時會違背「開閉原則」,一旦新增新產品就不得不修改工廠邏輯。
工廠方法模式(factory method pattern):定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。工廠方法模式讓乙個類的例項化延遲到其子類。
工廠方法模式又簡稱為工廠模式(factory pattern),又可稱作虛擬構造器模式(virtual constructor pattern)或多型工廠模式(polymorphic factory pattern)。
工廠方法模式是一種類建立型模式。
在簡單工廠中,建立物件的是另乙個類,而在工廠方法中,是由子類來建立物件。
在工廠方法模式結構圖中包含如下幾個角色:
product(抽象產品):它是定義產品的介面,是工廠方法模式所建立物件的超型別,也就是產品物件的公共父類
concreteproduct(具體產品):它實現了抽象產品介面,某種型別的具體產品由專門的具體工廠建立,具體工廠和具體產品之間一一對應。
factory(抽象工廠):在抽象工廠類中,宣告了工廠方法(factory method),用於返回乙個產品。抽象工廠是工廠方法模式的核心,所有建立物件的工廠類都必須實現該介面。
concretefactory(具體工廠):它是抽象工廠類的子類,實現了抽象工廠中定義的工廠方法,並可由客戶端呼叫,返回乙個具體產品類的例項。
與簡單工廠模式相比,工廠方法模式最重要的區別是引入了抽象工廠角色,抽象工廠可以是介面,也可以是抽象類或者具體類。
package factory;
inte***ce
product
class
concreteproduct1
implements
product
class
concreteproduct2
implements
product
class
concreteproduct3
implements
product
inte***ce
factory
class
concretefactory1
implements
factory
}class
concretefactory2
implements
factory
}class
concretefactory3
implements
factory
}public
class
******factory
}
工廠方法模式是簡單工廠模式的延伸,它繼承了簡單工廠模式的優點,同時還彌補了簡單工廠模式的不足。工廠方法模式是使用頻率最高的設計模式之一,是很多開源框架和api類庫的核心模式。
優點:
缺點:
每增加乙個產品就要增加乙個具體產品類和乙個對應的具體工廠類,這增加了系統的複雜度。
抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,它是一種物件建立型模式。
在抽象工廠模式中,每乙個具體工廠都提供了多個工廠方法用於產生多種不同型別的產品。
使用抽象工廠模式一般要滿足以下條件:
abstractfactory(抽象工廠):它宣告了一組用於建立一族產品的方法,每乙個方法對應一種產品。
concretefactory(具體工廠):它實現了在抽象工廠中宣告的建立產品的方法,生成一組具體產品,這些產品構成了乙個產品族,每乙個產品都位於某個產品等級結構中。
abstractproduct(抽象產品):它為每種產品宣告介面,在抽象產品中宣告了產品所具有的業務方法
concreteproduct(具體產品):它定義具體工廠生產的具體產品物件,實現抽象產品介面中宣告的業務方法。
package factory;
inte***ce
product
class
concreteproduct1
implements
product
class
concreteproduct2
implements
product
class
concreteproduct3
implements
product
inte***ce
factory
class
concretefactory1
implements
factory
}class
concretefactory2
implements
factory
}class
concretefactory3
implements
factory
}public
class
******factory
}
優點:
缺點:當產品族中需要增加乙個新等級的產品時,則所有的工廠類都需要進行修改。違背了開閉原則。
本部落格是對 該部落格 的學習
設計模式學習 工廠模式
工廠模式是較常見的一種設計模式 一 基本特點 工廠模式可分為簡單工廠模式,工廠模式和抽象工廠模式,它們的思路和實現都很相似.基本特點為至少包括以下三個類 工廠類 用new操作符建立各種產品類 抽象產品類 各產品類的基類,定義了產品的介面,具體產品類 抽象產品類的子類,包含了具體實現 使用者在使用時通...
設計模式學習(工廠模式)
這裡說的工廠模式是簡單工廠模式和抽象工廠模式,兩者有一定的區別,也有共同之處。上述過程是開閉原則的乙個典型體現。在下圖的例子中,factory類依賴具體物件的抽象來建立具體的物件 dell,sony 這乙個過程帶來的好處就是實現了factory類與具體產品之間的解耦合。客戶端可以自由的通過facto...
設計模式 工廠模式(學習)
在程式的世界裡,就像射鵰英雄傳一樣,我們的技能就像是武功一樣,我們只有不斷去學習練習才能有機會像郭靖一樣成為 天下第一 我認為技能和武功是很類似的,也有外功和內功,武俠之內功好比是我們技能演算法 武俠的外功好比是我們技能中某一語言的語法 武功秘籍好比是我們每種語言都有api和文件 武俠的勤加練習好比...