前面學習了簡單工廠模式,理解的不是很深刻,今天剛好看到了工廠方法模式,比較一下也加深對前面的理解。
首先無論是簡單工廠模式還是工廠方法模式都是把不變的地方提取出來,把容易發生變化的封裝起來。以達到做大程度的復用,和適應使用者的變動,以及專案的擴充套件。
又稱為靜態工廠模式,它專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有相通的父類。由工廠類根據傳入的引數動態決定應該建立哪乙個產品類的例項。它包含必要的判斷邏輯,能根據外界給定的資訊,決定應該穿件那個具體類的物件。簡單工廠模式可以理解為父親給兒子留了一筆錢,規定這筆錢可以用於上學、買房或者買車,然後讓兒子自己選擇用於哪乙個。
工廠類包含必要的邏輯判斷,可以決定在什麼時候建立哪乙個類的例項,客戶端可以避免直接建立物件。這樣就可以實現對責任的分割,降低耦合性,明確了具體的職責和權力,有利於整個系統的優化。
當產品具有比較複雜的多層結構時,它的工廠類只有乙個,這時候再以不變應萬變就成為它最大的缺點了。因為工廠類是整個組織的核心,它聚集了所有產品的建立邏輯,一旦工廠不能正常工作,整個系統都會受到影響,可擴充套件性較差。擴充套件性差一旦有新的需求,就不得不修改工廠邏輯,這樣就會導致工廠邏輯過為複雜,違背了開——閉原則。同時靜態工廠方法不利於形成基於繼承的等級結構。
它是乙個粒度很小的設計模式,因為模式的表現只是乙個抽象的方法。工廠方法模式定義了乙個用於建立物件的介面,讓子類決定具體例項化哪乙個類。也就是在工廠和產品之間增加介面,工廠不再負責產品的實現,有藉口針對不同條件返回不同的類例項,再由具體類例項去實現。工廠方法時簡單工廠的衍生,改進了許多簡單工廠的缺點,遵循了開——閉原則,實現了可擴充套件,可以用於更為複雜的產品結果場合。工廠方法可以理解為同樣是父親給兒子留了一筆錢,然後直接讓兒子去支配,怎麼花父親一律不管。
工廠方法模式客服了簡單工廠的很多缺點,它每個具體工廠只完成單一任務,而且遵循開——閉原則,**簡潔而且具有良好的擴充套件性。
如果有產品類需要修改,對應的工廠類也需要進行修改。一旦有多個產品類都需要修改的時候,對號入座的問題就出現了,這是對工廠類的修改就會變得相當複雜。因此工廠方法模式雖然有利於擴充套件但是不利於維護。
綜上所述,我們就可以知道針對不同的情況具體採用哪種模式對程式設計更有利了。當需要建立的物件比較少,客戶只知道傳入工廠的引數,並不關心如何建立物件的時候就可以採用簡單工廠模式;當類將建立物件的職責委託給多個幫助子類中的某乙個時就可以採用工廠方法模式了。
簡單工廠模式VS工廠方法模式
這兩天在看 大話設計模式 這本書很有意思,容易讓人理解,但是看久了,設計模式種類看多了,也會容易混,容易記不清楚,所以我們應該過一段時間停下腳步,總結一下。幫助我們理解,記憶。常常駐足進行總結,顆粒歸倉才是我們的收穫。最近看到了簡單工廠模式和工廠方法模式,從名字上看這麼的相似,越相似月不容易找到他們...
工廠方法模式 VS 簡單工廠模式
這片部落格我將以乙個計算器的例子跟大家分享一下我對簡單工廠模式和工廠方法模式的理解。計算器中的基本運算有 加 減 乘 除四個。首先定義乙個運算類,類中有numa和numb這兩個需要運算的變數,有乙個getresult方法用於獲取運算結果。public class operation 其次,定義加 減...
工廠方法模式VS簡單工廠
通過聯絡實際,我們利用乙個學雷鋒做好事的例子,來體會工廠方法模式和簡單工廠的區別與聯絡。1 寫乙個雷鋒類,學生繼承於雷鋒,通過例項化多個物件去完成洗衣 打掃等方法。2 但是學生都是短期的,如若我們需要增加乙個長時間為老人服務的團體 社群志願者類,同樣繼承於雷鋒。再寫出簡單工廠類,運用多型,需要社群志...