工廠方法和抽象工廠區別

2021-06-12 15:23:16 字數 1678 閱讀 8697

簡單工廠:簡單工廠沒有抽象類,只有乙個具體工廠類如myfactory,myfactory裡面有個工廠方法createproduct返回乙個基類產品,具體返回什麼例項通過傳入引數判斷。

用手機生產做個例子:

比如nokia簡單工廠就是只有nokiafactory工廠類,工廠方法就是createnokiaphone,引數是nokia手機型號,根據不同型號建立不同的nokia手機。明顯的缺點是nokia每發明乙個新型號的手機都需要修改簡單工廠類,違反了封閉修改,開放擴充套件原則。

工廠方法:該模式有乙個抽象基類和若干個派生的具體工廠類,基類定義了乙個虛工廠方法返回指定產品類的基類,派生類需要實現該虛方法並建立具體產品類返回。注意工廠方法的每個具體工廠只負責返回一種產品類。

同樣以手機生產做例子:

nokia工廠方法模式有乙個工廠基類nokiafactory,注意此工廠和上面不一樣,是抽象的。該類定義乙個虛工廠方法createnokiaphone,該方法返回nokiaphone基類。然後不同型號的手機對應乙個該型號的手機工廠,比如n97factory,注意此工廠派生於nokiafactory基類,n97factory實現虛工廠方法,它返回值是具體的nokia手機類,如new n97phone。(注意n97phone是nokiaphone的派生類)這樣的優點就是,新出乙個nokia手機型號,只需派生乙個該型號的工廠而無需修改原來的**。符合封閉修改,開放擴充套件原則。

抽象工廠:該模式和工廠方法模式很相似,也是乙個抽象基類和若干個具體工廠類,不同的是抽象工廠的工廠基類定義了多個虛工廠方法,每個虛工廠方法負責返回一種產品,多個工廠方法返回多種產品,並且這些產品具有某些聯絡。

抽象工廠就不止生產nokia手機了,還生產相關的周邊產品,首先nokiafactory基類會定義兩個虛方法,乙個是createnokiaphone用來生產手機,另乙個是createnokiacharger用於生產對應型號的手機充電器(假定不同型號手機使用不同的充電器)。然後派生類n97factory就要生產兩種相關的產品,乙個是n97phone,還有乙個是n97charger,這兩個物件是對應的關係,因此封裝到抽象工廠來生產一系列相關的物件。

總結:用最簡單的話來概括就是,簡單工廠只有乙個具體工廠類來建立一種基類的多個不同派生類,工廠方法就是有多個派生於乙個基類的具體工廠類,每個具體工廠只生產一種基類的乙個派生類,抽象工廠也是只有乙個工廠基類,但是每個具體工廠生產多個相關基類的各乙個派生類。

工廠方法模式:

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

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

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

抽象工廠模式:

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

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

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

區別:

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

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

工廠方法和抽象工廠區別

本文介紹工廠方法和抽象工廠區別。工廠方法建立一般只有乙個方法,建立一種產品。抽象工廠一般有多個方法,建立一系列產品。目的不一樣 工廠方法建立 一種 產品,他的著重點在於 怎麼建立 也就是說如果你開發,你的大量 很可能圍繞著這種產品的構造,初始化這些細節上面。也因為如此,類似的產品之間有很多可以復用的...

簡單工廠 工廠方法 和抽象工廠區別

簡單工廠 factory pattern 簡單工廠模式,把物件 統一介面 的建立封裝起來,而不去用了解物件所代表的真正的實現類及其初始化過程。我們只需要把引數傳遞給簡單工廠,工廠就會根據你的需要返回相應的產品物件。示例 如下 對不同的產品的例項化,由不同的工廠來實現,每一種工廠都是生產特定的產品。但...

簡單工廠 工廠方法 抽象工廠區別與聯絡

工廠模式按照對類的抽象程度可以劃分為如下三種型別 1 簡單工廠模式 factory 2 工廠方法模式 factory method 3 抽象工廠模式 abstract factory 簡單工廠 定義 是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式中包含的角色及其相應的職責如下 抽象產品 ...