工廠方法和抽象方法的區別

2021-06-08 23:15:03 字數 1221 閱讀 2072

今天看 spring 書籍說 spring容器 其實可看成是乙個超大型的工廠,如實再次學習了下 工廠設計模式

工廠設計模式有兩種實現:

工廠方法模式:定義乙個建立物件的介面,由子類決定要例項化的類是哪乙個,工廠方法讓類的例項化推遲到子類。

以上的定義有點抽象:

那麼 這兩種的主要區別是什麼呢?(在網上有如下的理解個人覺得是對的)

理解1:

抽象工廠模式是讓工廠和依賴工廠的子類全部依賴乙個介面或者抽象類,因為抽象代表這穩定,這樣可以很容易的遵循oo中比較著名的開放關閉原則,設計出來的系統、框架或者程式很富有彈性和擴充套件能力(這句話有點大概的意思,沒有具體的)

理解2:

工廠模式是:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,使乙個類的例項化延遲到子類。

它有個特點,就是通常工廠的類層次與產品的類層次幾乎是一樣的樹。如果說工廠是你的影子,你就是產品了。在你平時未用到模式的時候,你需要什麼就new乙個,這種情況就好比你躺在地上,人影合一了。那什麼時候需要工廠模式呢。看看定義:「使乙個類的例項化延遲到子類」,這個是關鍵,當你有必要延遲例項化的時候才需要用工廠模式。那什麼情況下要延遲呢,在單例模式中有惰性單例(就是單例那個靜態屬性)……等等,就是一開始你還不適合立刻就建立該物件,你還需要一些資源或其它準備工作。整個系統的執行不像單個程式那樣,系統需要很多資源和多方面的協同工作。

抽象工廠是:提供乙個建立一系列相關或相互依賴物件的介面,而無虛指定他們的具體類。

抽象工廠比工廠模式複雜的多。如果樓主說他們像可能是他們都叫工廠,都生成產品,都是介面型設計模式。但是我覺得他們是兩個不同的設計模式。首先他們的目的是不同的。工廠是為了「延遲建立」,而抽象工廠是提供一系列的介面,是為了組織建立物件的靈活性,避免重複,避免耦合低內聚。

我的理解:先看兩個類圖:

1:工廠方法

2:抽象工廠

比較上面的類圖:抽象工廠方法其實是可以依賴工廠方法的 (類圖中原料物件的建立就是用的工廠方法) ,抽象 就是把多個產品的乙個公共的特性給抽象出來,這樣可以提供**的復用程度也是針對抽象程式設計,這就是抽象工廠的主要目的,而抽象出來的類(如上面類圖的原料) 可以用工廠方法設計。而對於工廠方法,我們可以看出一類工廠只能生產一類具體的物件。

工廠方法和抽象方法的區別

工廠方法 有creator和product兩個物件,creator提供乙個抽象介面來建立乙個產品,客戶只要知道他們所使用的抽象型別就可以了,由creator的每個子類來 決定 例項化哪個 具體類 子類由工廠方法例項化。把例項化推遲到子類。抽象工廠 提供乙個抽象介面來建立乙個產品家庭,每個具體子類都建...

工廠方法和抽象工廠的區別

區別 工廠方法裡面產品分為抽象基類和乙個具體實現的子類 而抽象工廠將具體實現子類進行了模組化的細分,有多個抽象產品類 具體工廠類能建立多個具體產品類的例項。我從一下幾個方面來理解抽象工廠和工廠方法不同點 抽象工廠更像乙個複雜版本的策略模式,策略模式通過更換策略來改變處理方式或者結果 而抽象工廠的客戶...

工廠方法與抽象工廠方法的區別

工廠方法模式 乙個抽象產品類,可以派生出多個具體產品類。乙個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類只能建立乙個具體產品類的例項。抽象工廠模式 多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。乙個抽象工廠類,可以派生出多個具體工廠類。每個具體工廠類可以建立多個具體產品類的例項。區...