工廠方法模式與抽象工廠模式

2021-07-03 20:37:01 字數 2053 閱讀 4901

工廠方法

public inte***ce product

public inte***ce creator

public class concreteproduct1 implements product

}public class concreteproduct2 implements product }

public class concretecreator1 implements creator

}public class concretecreator2 implements creator}

public class client

}

抽象工廠

//定義不同的產品之間的一定具備的標準,用inte***ce實現 

//其中的method()方法可看作提取出不同產品的共性,如手機都有類似的功能

inte***ce iproducta

inte***ce iproductb

//實現了產品標準實現的一系列具體產品

//由於已經設計好a1由廠商1生產,故以下輸出**有「廠商x」

class producta1 implements iproducta

} class producta2 implements iproducta

} class productb1 implements iproductb

} class productb2 implements iproductb

} //每一種牌子的產品生產工廠,即不同的廠商負責自己牌子產品的生產

abstract class factory1

abstract class factory2

//具體的工廠用來生產相關的產品

class concretefactory1 extends factory1

public iproductb getproductb1()

} class concretefactoryb extends factory2

public iproductb getproductb2()

} //測試類

public class client

}

4. 應用場景

工廠方法:

在以下情況下,適用於工廠方法模式:

(1) 當乙個類不知道它所必須建立的物件的類的時候。

(2) 當乙個類希望由它的子類來指定它所建立的物件的時候。

(3) 當類將建立物件的職責委託給多個幫助子類中的某乙個,並且你希望將哪乙個幫助子類是**者這一資訊區域性化的時候。

抽象工廠:

(1) 乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有形態的工廠模式都是重要的。

(2) 這個系統有多於乙個的產品族,而系統只消費其中某一產品族。

(3) 同屬於同乙個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。

(4) 系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使客戶端不依賴於實現。

5.工廠方法模式:

乙個抽象產品類,可以派生出多個具體產品類。 

乙個抽象工廠類,可以派生出多個具體工廠類。 

每個具體工廠類只能建立乙個具體產品類的例項。

抽象工廠模式:

多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。 

乙個抽象工廠類,可以派生出多個具體工廠類。 

每個具體工廠類可以建立多個具體產品類的例項。 

區別:工廠方法模式只有乙個抽象產品類,而抽象工廠模式有多個。 

工廠方法模式的具體工廠類只能建立乙個具體產品類的例項,而抽象工廠模式可以建立多個

工廠方法模式與抽象工廠模式

這篇部落格主要記錄一下工廠方法模式和抽象工廠模式。工廠方法模式比較常見,且相對比較容易理解,因此直接介紹一下它的定義及設計結構。工廠方法模式定義了乙個建立物件的介面,但由子類決定例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。如圖所示,抽象的creator提供了乙個建立物件的介面factorym...

抽象工廠與工廠方法模式

1.如果乙個後花園只種蔬菜類,那麼就用簡單工廠就可以了.2.如果後花園蔬菜品種繁多.得用工廠方法才可以,把共有的東西抽象出來.3.如果要擴大後花園的規模,比如乙個在北方,乙個在南方,這樣工廠方法就無法實現了,就應當用抽象工廠,把各種各樣的植物,又組成乙個後花園.簡單工廠是乙個工廠只生產一類的產品,面...

抽象工廠模式(工廠方法模式)

工廠方法模式是在簡單工廠模式的基礎之上將建立具體產品類的工廠進一步抽象,使產品的建立不依賴具體的工廠,只需要依賴抽象工廠,後續如果要新增新的產品和工廠,只需要實現該抽象工廠的介面即可。建立抽象工廠和產品 public inte ce productfactory public inte ce pro...