大話設計模式之工廠模式

2021-06-21 10:33:57 字數 2519 閱讀 5006

千百年來,關於「空中花園」有乙個美麗動人的傳說。新巴比倫國王尼布甲尼撒二世娶了公尺底的公主安美依迪絲為王后。公主美麗可人,深得國王的寵愛。可是時間一長,公主愁容漸生。尼布甲尼撒不知何故。公主說:「我的家鄉山巒疊翠,花草叢生。而這裡是一望無際的巴比倫平原,連個小山丘都找不到,我多麼渴望能再見到我們家鄉的山嶺和盤山小道啊!」原來公主得了思鄉病。於是,尼布甲尼撒二世令工匠按照公尺底山區的景色,在他的宮殿裡,建造了層層疊疊的階梯型花園,上面栽滿了奇花異草,並在園中開闢了幽靜的山間小道,小道旁是潺潺流水。工匠們還在花園**修建了一座城樓,矗立在空中,巧奪天工的園林景色終於博得公主的歡心。故事講到這裡,在我們的故事中蘊藏著怎樣的設計模式呢?今天這篇博文的內容就從我們美麗動人的傳說空中花園開始!

如果空中花園中只種花,那麼就用簡單工廠就可以了,如果公主喜歡各種各樣的花,種模擬較繁多,我們就需要用工廠方法,把公共有的東西抽象出來,再者如果公主想要擴大花園的規模,乙個在安徽乙個在河北,這樣工廠方法也就無法實現了,這個時候,就需要用到抽象工廠,把各種各樣的植物,又組成乙個空中花園。我們先來看一下工廠方法模式模式的結構圖:

在前面的博文中,我們學習過簡單工廠模式,簡單工廠是乙個工廠只生產一類的產品,面對的是具體的類,工廠方法是可以生產不同的產品,把公共的方法抽象出來,然後進行建立各種各樣的產品.抽象工廠把幾種產品劃出共同的東西,把相互依賴的物件抽象出來,只要實現這些介面就可以得到不同的產品,簡單工廠模式系統難以擴充套件,一旦新增新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過於複雜,下面就具體看看工廠模式是如何解決該問題的。 工廠方法模式之所以可以解決簡單工廠的模式,是因為它的實現把具體產品的建立推遲到子類中,此時工廠類不再負責所有產品的建立,而只是給出具體工廠必須實現的介面,這樣工廠方法模式就可以允許系統不修改工廠類邏輯的情況下來新增新產品,這樣也就克服了簡單工廠模式中缺點。下面看下工廠模式的具體實現**(這裡還是以簡單工廠模式中點菜的例子來實現:

namespace 設計模式之工廠方法模式

/// 酸辣土豆絲這道菜

public class chilisourpotatod: food

}/// /// 薑汁皮蛋這道菜

///

public class preservedeggsingingersauce : food

}/// /// 抽象工廠類

///

public abstract class creator

/// /// 酸辣土豆絲工廠類

///

public class chilisourpotatod:creator

}/// /// 薑汁皮蛋工廠類

///

public class preservedeggsingingersaucefactory:creator

}/// /// 客戶端呼叫

///

class client}}

使用工廠方法實現的系統,如果系統需要新增新產品時,我們可以利用多型性來完成系統的擴充套件,對於抽象工廠類和具體工廠中的**都不需要做任何改動。例如,我們我們還想點乙個「黃瓜炒雞蛋」,此時我們只需要定義乙個黃瓜炒雞蛋具體工廠類和黃瓜炒雞蛋類就可以。而不用像簡單工廠模式中那樣去修改工廠類中的實現,具體**如下所示:

/// /// 黃瓜炒雞蛋這道菜

///

public class scrambleeggwithcucumber : food

}/// /// 黃瓜炒雞蛋工廠類,負責建立黃瓜炒雞蛋這道菜

///

public classscrambleeggwithcucumbe***ctory : creator

}/// /// 客戶端呼叫

///

class client

}

簡單工廠:嚴格說並不是乙個設計模式。簡單工廠沒有抽象類,只有乙個具體工廠類如myfactory,然後myfactory裡面有個工廠方法createproduct返回乙個基類產品,具體返回什麼具體例項通過傳入引數然後用case判斷。用手機生產做個例子:比如魅族簡單工廠就是只有meizufactory工廠類,工廠方法就是createmeizuphone,引數是meizu手機型號,根據不同型號建立不同的meizu手機(使用case)。很明顯的缺點就是meizu每發明乙個新型號的手機都需要修改簡單工廠類(增加case判斷),違反了封閉修改,開放擴充套件原則。

工廠方法:該模式有乙個抽象基類和若干個派生的具體工廠類,基類定義了乙個虛工廠方法返回指定產品類的基類,派生類需要實現該虛方法並建立具體產品類返回。注意工廠方法的每個具體工廠只負責返回一種產品類。同樣以手機生產做例子:meizu工廠方法模式有乙個工廠基類meizufactory,注意此工廠和上面不一樣,是抽象的。該類定義乙個虛工廠方法createmeizuphone,該方法返回meizuphone基類。然後不同型號的手機對應乙個該型號的手機工廠,這樣的優點就是,新出乙個meizu手機型號,只需派生乙個該型號的工廠而無需修改原來的**。符合封閉修改,開放擴充套件原則。設計之旅,未完待續......

大話設計模式之工廠模式

不解釋,直接上 雷鋒工廠 inte ce ifactory 學雷鋒的大學生工廠 class undergraduatefactory ifactory 社群志願者工廠 class voluntee ctory ifactory 客戶端呼叫 ifactory factory new undergrad...

大話設計模式之簡單工廠模式

簡單工廠模式,也就是說,到底要例項化誰,將來會不會增加例項化的物件,比如計算器程式中增加開根運算,這是很容易變化的地方,應該考慮用乙個單獨的類來做創造例項的過程,這就是工廠,具體 如下 public class operationfaction public static operation cre...

大話設計模式之簡單工廠模式

最近朋友推薦了一本書 大話設計模式 此書剛剛到,博主也還沒開始看,希望以博文的方式與大家一起分享,一起學習.簡單工廠模式,也就是說,到底要實列化誰,將來會不會增加實列化的物件,比如增加開根運算,這是很容易實列化的地方應該考慮用乙個單獨的類來做這個創造實列的過程,這就是工廠,來我們一起看看這個類如何寫...