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

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

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

工廠方法模式:定義一個創建對象的接口,由子類決定要實例化的類是哪一個,工廠方法讓類的實例化推遲到子類。

抽象工廠模式:提供一個接口,用於創建相關或依賴對象的家族,而不需要明確指定具體的類。

以上的定義有點抽象:

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

理解1:

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

理解2:

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

抽象工廠是:提供一個創建一系列相關或相互依賴對象的接口,而無虛指定他們的具體類。
抽象工廠比工廠模式複雜的多。如果樓主說他們像可能是他們都叫工廠,都生成產品,都是接口型設計模式。但是我覺得他們是兩個不同的設計模式。首先他們的目的是不同的。工廠是爲了“延遲創建”,而抽象工廠是提供一系列的接口,是爲了組織創建對象的靈活性,避免重複,避免耦合低內聚。

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

1:工廠方法

2:抽象工廠

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章