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

2021-09-30 06:38:31 字數 1235 閱讀 9465

簡單工廠(****** factory pattern)

簡單工廠模式,把物件(統一介面)的建立封裝起來,而不去用了解物件所代表的真正的實現類及其初始化過程。我們只需要把引數傳遞給簡單工廠,工廠就會根據你的需要返回相應的產品物件。示例**如下:

對不同的產品的例項化,由不同的工廠來實現,每一種工廠都是生產特定的產品。

但是我有個疑問就是,雖然每個需要產品的呼叫方都不再和具體的產品耦合,但每乙個都會和乙個特定的工廠進行耦合。理解:每個呼叫方都仍不會受到產 品耦合的關係,有工廠這一層次,讓這種易變性仍然保持在工廠的層次。並且在新增product和呼叫方的時候不會再影響到原先的工廠(簡單工廠的話就要修 改簡單工廠類了),只需要增加新的工廠類並在新的呼叫方中呼叫新的工廠就可以了。

抽象工廠(abstract factory)

乙個工廠有時不光生產一種產品,比如乙個青銅器的兵工廠,可能不光生產青銅刀,還生產青銅劍,屬於乙個系列的產品。現在生產工藝公升級,現在生產性 能更好的鐵刀,鐵劍,原先的模具,融爐都不再適用,而且為了滿足過渡需要,原先的工廠肯定也要保留,而且兩個工廠有很多相似之處可以提取出來。兩個工廠生 產的產品也有很多相似之處,但乙個工廠生產的不同產品的相同之處只在於他們用的生產工藝和處理過程是一樣的,但產品本身是不同的。但在不同的工廠中,產品 卻有類似的,如青銅刀-鐵刀,青銅劍-鐵劍。

具體的工廠生產的是乙個產品系列內的產品,不同工廠生產的是不同代的產品。

抽象工廠的uml類圖大致類似上面,兩個具體工廠都繼承自統一的抽象工廠,抽象工廠生產乙個系統的產品(即iproduct1 和iproduct2),兩個具體工廠就生成具體系列的產品。

總結 簡單工廠,方法工廠和抽象工廠沒有優劣之分,只有不同的應用場景而已:

  如果產品的種類是不變的,只是想隱藏產品的例項化過程和具體的產品,就可以用簡單工廠,也就是沒有啥是變化的。

  如果產品種類是不定的,是變化的,如果很多的話,若用簡單工廠的話,簡單工廠的維護就會變大,而且會對已有類產生影響(原先的**都會因為簡單工廠類的修 改而重新測試)。而且傳入簡單工廠的引數與產品沒有明確的對應,維護起來不好。在這種場景下就可以用方法工廠,對新增產品只要增加新的工廠,在新的呼叫方 呼叫相應工廠就ok了,可以完全解決上面的問題。

  抽象工廠處理的場景是,產品是分代的,且每個工廠都不止生產一種型別的產品(如青銅器兵工廠生產青銅刀和青銅劍,鐵兵工廠生廠鐵刀和鐵劍),如果工廠都生 產一種型別(具體點就是功用啥幾乎都不一樣,在類中表現為不同介面)的產品,就退化為方法工廠了。個人感覺,方法工廠就是抽象工廠的乙個特例。

工廠方法和抽象工廠區別

簡單工廠 簡單工廠沒有抽象類,只有乙個具體工廠類如myfactory,myfactory裡面有個工廠方法createproduct返回乙個基類產品,具體返回什麼例項通過傳入引數判斷。用手機生產做個例子 比如nokia簡單工廠就是只有nokiafactory工廠類,工廠方法就是createnokiap...

工廠方法和抽象工廠區別

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

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

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