設計模式1 工廠方法模式

2021-10-04 13:48:37 字數 2884 閱讀 6939

關於工廠的設計模式,我們可以列出來這三個,既然是都和工廠有關,當然就少不了他們的比較,這裡簡單說下,在比較中理解以便更好的學習。本篇著重講工廠方法模式。

簡單工廠模式不屬於23種經典設計模式的一種,是乙個專門生產某個產品的類,例如:乙個鍵盤工廠,不管生產什麼牌子的鍵盤,就只能生產鍵盤,對鍵盤的邏輯操作也只能在這乙個類裡進行。

工廠方法模式是對簡單工廠模式的一種抽象,可以把鍵盤工廠看做乙個父工廠,此時羅技的鍵盤工廠或是雷蛇的鍵盤工廠都實現了這個鍵盤的介面,這個時候生產鍵盤的事就交給這些個子類完成了,沒有對原工廠進行任何修改,是不是滿足了開閉原則。

抽象工廠模式是工廠方法模式的公升級版本,工廠方法模式只生產一類的(同等級)產品,而抽象工廠模式是可以生產多品類的(產品族)產品,所以在工廠方法模式的基礎上,他不僅可以生產鍵盤,還可以生產滑鼠,筆記本等產品了。

故宮房簷

上面只是簡單介紹下他們的區別或是關係。本篇主要講的還是工廠方法模式,簡單工廠模式會在後續的文章中講到。

通俗的描述讓人很明白,但還是需要乙個正式的定義:

工廠方法模式(factory method),定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到其子類。

這些物件是共享同乙個inte***ce或者來自於同乙個parent class的。

工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯轉移到了客戶端**上來進行,你想要加功能,你就得新建工廠類,所以工廠方法模式還是有優缺點的。

優點

缺點:

根據定義,我們實現的流程可以這樣,

新建乙個筆記本的產品介面,可以生產筆記本

然後不同品牌的筆記本實現這個介面,具體實現的類

新建筆記本的工廠類

不同的廠家再去實現這個工廠類

例項化測試

public

inte***ce

computer

class

xiaocomputer

implements

computer

}class

thinkcomputer

implements

computer

}class

implements

computer

}

以上完成前兩步。下面是新建筆記本工廠類,然後不同廠家實現

public

inte***ce

compute***ctory

class

xiaofactory

implements

compute***ctory

}class

thinkfactory

implements

compute***ctory

}class

implements

compute***ctory

}

這樣就完成了工廠方法模式的設計,我們可以看到各廠家的父工廠是compute***ctory類,多個廠家都實現了這個類,然後他們就可以生產筆記本了。

測試

/**

* 工廠方法模式測試

*/public

class

factorymethodtest

}

小公尺生產的筆記本!

thinkpad生產的筆記本!

蘋果生產的筆記本!

process finished with exit code 0

下面是類結構圖,由乙個抽象工廠建立多個具體工廠,再由具體工廠建立其對應的產品類,然後就可以建立具體產品物件了。

經過實踐操作,你才能感受到,每增加乙個產品就要增加乙個具體產品類和乙個對應的具體工廠類,確實會增加**量,而簡單工廠模式只需要修改乙個類就行了,當然,這得看具體的應用場景了,例如:客戶不關心建立產品的細節,只關心產品的品牌,就適合工廠方法模式了。

beanfactory 是乙個非常純粹的 bean 容器,它是 ioc 必備的資料結構,有三個直接子類 listablebeanfactory、hierarchicalbeanfactory 和 autowirecapablebeanfactory,乙個直接實現類,defaultlistablebeanfactory 為最終預設實現,它實現了所有介面。

此處只是簡單介紹了spring中用到的工廠模式,理解比較淺顯,不是很深入,有不對的地方也請指出,看來對於原始碼的研究不是一件容易的事,以後慢慢努力吧。

參考

設計模式(1) 工廠方法模式

工廠方法模式uml類圖如圖所示 說明 具體產品繼承抽象產品,具體工廠繼承抽象工廠,具體工廠依賴具體產品。具體例項 如下所示 其實是在簡單工廠模式例項 的基礎上對工廠類進行了一下抽象 抽象工廠類 public abstract class abstractfactory具體產品a工廠類 ublic c...

設計模式 1 工廠方法模式

簡單工廠模式有個問題是,類的建立是需要依賴工廠類的,如果要拓展程式,那麼需要對工廠類進行修改,這個增加了風險。工廠方法模式可以避免這種情況,方法建立乙個工廠介面和建立多個工廠類,理解如下 對了抽象方法a,b和c分別為其的兩個不同實現,現在建立工廠介面d,工廠介面d的實列類e和f分別對b和c進行實列化...

設計模式 1 工廠方法模式

建立型模式可以隔離客戶程式對需要例項化型別的依賴關係,這類模式一般通過將例項化具體物件的職責委託給第三方物件的方式,使得客戶程式或者外部系統在獲得所需的具體型別例項的同時,而不必對其發生直接的引用。建立型模式包括 按照大多數設計模式書籍採用的順序,首先從工廠方法模式開始。簡單工廠模式並沒有被歸入23...