設(shè)計模式之策略模式和工廠模式的區(qū)別
1.前言
本篇博客轉(zhuǎn)載于策略模式與工廠模式比較
2.區(qū)別
這段時間看了一些設(shè)計模式,看到策略模式與工廠模式的時候,總是感覺他們很相似,不要區(qū)分,到具體的場景了你可能還在徘徊到底用工廠還是策略呢?這幾天就想寫一篇關(guān)于策略模式與工廠模式區(qū)別的文章,但一直沒思路,昨天跟淘寶mm聊了聊,今天早上思路頓時開闊。
當(dāng)時我在說明策略模式與工廠模式區(qū)別的時候舉了一個例子。說你要去買件衣服,給你50塊錢,策略模式的做法就是去京東、當(dāng)當(dāng)、淘寶、卓越等網(wǎng)上去看,然后決定要買那一件。而工廠模式的做法確實(shí),告訴系統(tǒng)我需要用50塊錢買件衣服,到底他去當(dāng)當(dāng)、淘寶、京東、卓越你不關(guān)心,你只需要50塊錢的一件衣服。淘寶mm一語道出工廠相當(dāng)于黑盒子,策略相當(dāng)于白盒子。呵呵,佩服。總結(jié)得很精煉。今天早上醒來就在想這問題,老感覺昨天自己的比喻有點(diǎn)繞在概念之中,別人可能不認(rèn)真分析可能還是很難理解他們的區(qū)別。所以就重新設(shè)計了一個小實(shí)例。
工廠模式:有一天你決定去吃披薩,一看菜單,哦,種類很多呀,你就點(diǎn)了個培根披薩,過了二十分鐘,你的披薩就來了就可以吃到了。但這個披薩是怎么做的,到底面粉放了多少,培根放了多少,佐料放了多少,有多少到工序,你是不需要管的,你需要的是一個美味培根披薩。
策略模式:同樣還是在披薩店,你要一個培根披薩,老板說想吃自己去做吧。原料有培根、面粉、佐料。工序有1、2、3工序,你自己去做吧。然后你就需要自己去做,到底放多少培根,放多少面粉,放多少佐料,這都你自己來決定,工序1、2、3,你是怎么實(shí)現(xiàn)的,都你自己決定。最后你得到了披薩。
一般情況下,策略模式是為了解決的是策略的切換與擴(kuò)展,更簡潔的說是定義策略族,分別封裝起來,讓他們之間可以相互替換,策略模式讓策略的變化獨(dú)立于使用策略的客戶。可以應(yīng)用的場景有優(yōu)惠系統(tǒng)、工資計算系統(tǒng)等。上例中,你可以自己做多種口味的披薩的,青菜的,牛肉的,海鮮的你都可以一次都做。而工廠模式主要解決的是資源的統(tǒng)一分發(fā),將對象的創(chuàng)建完全獨(dú)立出來,讓對象的創(chuàng)建和具體的使用客戶無關(guān)。主要應(yīng)用在多數(shù)據(jù)庫選擇,類庫文件加載等。上例中你可以點(diǎn)很多披薩,只要披薩店給提供的,你都可以點(diǎn)。很明顯的是策略模式是開放的,作為一個主體你的活動范圍是全程的,大多數(shù)事情要你自己親力親為。而工廠模式作是封閉的,作為主體的你的活動范圍是有限的,很多事情都幫組你做好了,你直接“點(diǎn)”就可以了。
想到這里,我突然想云計算跟傳統(tǒng)電腦模式的聯(lián)系。
傳統(tǒng)的電腦模式,你需要寫程序,你得自己去裝個eclips,你需要ps圖片,你需要去裝個photoshop,你需要看電影,你得裝一個看電影軟件。這就是典型的策略模式,什么東西必須你自己動手去實(shí)現(xiàn)。
而云計算,我需要寫程序,云就跟你說,親這里有eclips,你可以直接用了。你需要看電影,云就跟你說,親,這里有pplive,你可以直接看電影,你需要美圖,云說,親,這里有美圖秀秀,能幫你的照片變得很漂亮的哦。這就是典型的工廠模式。
3.自己的感悟
我感覺這個例子也有點(diǎn)兒偏差,工廠和策略都是處理相近產(chǎn)品,而策略側(cè)重對內(nèi)部的封裝,但是不是在抽象就具體而言了,而工廠主要是再抽象,讓不同的對象處理不同的邏輯(單一職責(zé)原則),不同的對象之間可能包含重復(fù)代碼(邏輯)。就按照作者的例子而言 工廠模式:有一天你決定去吃披薩,一看菜單,哦,種類很多呀,你就點(diǎn)了個培根披薩,過了二十分鐘,你的披薩就來了就可以吃到了。但這個披薩是怎么做的,哪個廚師做的?到底面粉放了多少?培根放了多少?有多少到工序?你是不需要管的,你需要的是一個美味培根披薩。 策略模式:同樣還是在披薩店,你要一個培根披薩,老板就問,培根披薩有三位廚師制作。有酸辣味,芝士味等,請問你選擇誰制作的,什么口味,都你自己決定。最后你得到了披薩。

浙公網(wǎng)安備 33010602011771號