前言
以小說的筆法寫的設計模式系列文章,你絕對看得懂![首發於公眾號:"聊聊程式碼"]
設計模式系列·王小二需求歷險記(一)
設計模式系列·王小二需求歷險記(二)
設計模式系列·封裝、繼承、多型
設計模式系列·初探設計模式之王小二的疑問
設計模式系列·Facade模式之MVC的煩惱
設計模式系列·Adapter 模式之如何優雅的使用別人的輪子
設計模式系列·類爆炸之Bridge模式
設計模式系列·工廠方法模式之 Code Review
設計模式系列·抽象工廠模式
小二的困惑
最近,小二跟著C哥學了不少設計模式,寫程式碼的功夫可謂更上一層樓。
但是當小二單獨面對新的專案時,想用學過的設計模式來解決問題,往往無從下手。
這樣尷尬的處境令小二很是苦惱。於是,小二決定去請教萬能的C哥...
C哥最近不怎麼忙,此時正坐在他的人體工程學椅上幽閒的喝茶呢。
小二找到C哥,坦誠的說出了自己的困惑。
"哈哈,小二。這很正常,這是蛻變的必經之路。"
"這麼說當初您也經歷過?"
"肯定啊,當初我也有相同的困惑。"
"哈哈,太好了,煩請C哥不吝賜教!"
思維誤區
"小二,我們一步步來。當你面對一個專案時,你的設計思路是什麼?"
"嗯...我仔細想想..."
過了一會,小二說到:"
我仔細的想了一下,分3個步驟吧:
1、先識別出我需要的類;
2、開始設計這些類的功能;
3、將類組合到一起,形成一個整體。"
"哈哈,不錯。但你有沒有發現問題?"
"嗯?有問題嗎?"
"很多人都會這麼做,但這會帶你進入誤區。"
"啊?這還有誤區?頭一次聽說。"
面對小二的疑惑,C哥耐心的解釋道:"
其實,最早發現這個誤區的,是國外的一名建築學家。
他的觀點是:"從片段開始建設,不是一個好的設計方法。"
"不太明白,為什麼這麼說呢?"
C哥繼續說道:"你有沒有發現,在你做第2步:著手設計類的功能的時候,你這時候就開始了設計。但你設計的主要精力放在了類的功能上,慢慢的,你就按照同樣的思路,設計出來基本一致的類。然後你再把這些基本一致的類拼裝到一起,形成一個整體。"
"對!確實是這樣!"
"哈哈,這就是問題了。"
"C哥,你能說的再具體一點嗎?"
"就是說:你這樣設計出來的各個模組都是相似或相同的。但各部分需要與眾不同,就如世界上沒有兩片相同的葉子一樣,他們都要利用自己獨有的特性,根據自己的特性而有不同的設計,從而發揮自己獨有的功能。"
看小二還有點疑惑,C哥笑了笑:"我給你看兩幅圖,你覺的哪個更有特色?"
錯落有致的房屋
小區清一色的房子
"當然是第一幅圖片的建築更有特色啊,他們依山而建,每棟房屋都有自己與眾不同的特點。"小二爽快的回答道。
"是啊!你過早的去設計類的功能,然後再把他們組裝到一起的思路,是不會很全面的想到你要用到的設計模式的,自然而然,學了很多設計模式也就無從下手了。"
應用到軟體設計中
"C哥,大體明白了您的意思。那我具體應該怎麼做呢?"
"那就需要改變你之前的設計思路了。"
"嗯嗯。C哥有什麼好辦法?"
"我先給你說說比較好的設計思路吧:
1、理解需求,從整體的概念觸發;
2、識別在整體中可能出現的模式;
3、從為其他模式創造場景的模式開始;
4、應用這些模式;
5、對剩下的模式和中途發現的新模式,重複步驟3-5。"
"啊?聽起來好複雜啊!"
"哈哈,你要是一下聽懂了才怪呢。"
"C哥,你能不能舉些例子啊?"
"好啊,但今天有點累了,不早了,明天再說吧!正好我也回去想想..."
"嗯嗯,好的,明天再找您,感謝C哥!"