1. 程式人生 > >策略模式與工廠模式比較

策略模式與工廠模式比較

這段時間看了一些設計模式,看到策略模式與工廠模式的時候,總是感覺他們很相似,不要區分,到具體的場景了你可能還在徘徊到底用工廠還是策略呢?這幾天就想寫一篇關於策略模式與工廠模式區別的文章,但一直沒思路,昨天跟淘寶mm聊了聊,今天早上思路頓時開闊。

當時我在說明策略模式與工廠模式區別的時候舉了一個例子。說你要去買件衣服,給你50塊錢,策略模式的做法就是去京東、噹噹、淘寶、卓越等網上去看,然後決定要買那一件。而工廠模式的做法確實,告訴系統我需要用50塊錢買件衣服,到底他去噹噹、淘寶、京東、卓越你不關心,你只需要50塊錢的一件衣服。淘寶mm一語道出工廠相當於黑盒子,策略相當於白盒子。呵呵,佩服。總結得很精煉。今天早上醒來就在想這問題,老感覺昨天自己的比喻有點繞在概念之中,別人可能不認真分析可能還是很難理解他們的區別。所以就重新設計了一個小例項。

工廠模式:有一天你決定去吃披薩,一看選單,哦,種類很多呀,你就點了個培根披薩,過了二十分鐘,你的披薩就來了就可以吃到了。但這個披薩是怎麼做的,到底面粉放了多少,培根放了多少,佐料放了多少,有多少到工序,你是不需要管的,你需要的是一個美味培根披薩。

策略模式:同樣還是在披薩店,你要一個培根披薩,老闆說想吃自己去做吧。原料有培根、麵粉、佐料。工序有123工序,你自己去做吧。然後你就需要自己去做,到底放多少培根,放多少麵粉,放多少佐料,這都你自己來決定,工序123,你是怎麼實現的,都你自己決定。最後你得到了披薩。

一般情況下,策略模式是為了解決的是策略的切換與擴充套件,更簡潔的說是定義策略族,分別封裝起來,讓他們之間可以相互替換,策略模式讓策略的變化獨立於使用策略的客戶。

可以應用的場景有優惠系統、工資計算系統等。上例中,你可以自己做多種口味的披薩的,青菜的,牛肉的,海鮮的你都可以一次都做。而工廠模式主要解決的是資源的統一分發,將物件的建立完全獨立出來,讓物件的建立和具體的使用客戶無關主要應用在多資料庫選擇,類庫檔案載入等。上例中你可以點很多披薩,只要披薩店給提供的,你都可以點。很明顯的是策略模式是開放的,作為一個主體你的活動範圍是全程的,大多數事情要你自己親力親為。而工廠模式作是封閉的,作為主體的你的活動範圍是有限的,很多事情都幫組你做好了,你直接“點”就可以了。

想到這裡,我突然想雲端計算跟傳統電腦模式的聯絡。

傳統的電腦模式,你需要寫程式,你得自己去裝個eclips,

你需要ps圖片,你需要去裝個photoshop,你需要看電影,你得裝一個看電影軟體。這就是典型的策略模式,什麼東西必須你自己動手去實現。

而云計算,我需要寫程式,雲就跟你說,親這裡有eclips,你可以直接用了。你需要看電影,雲就跟你說,親,這裡有pplive,你可以直接看電影,你需要美圖,雲說,親,這裡有美圖秀秀,能幫你的照片變得很漂亮的哦。這就是典型的工廠模式。