大B:“剛畢業的大學生麵臨人生的這一大轉折。要好好準備,去迎接機遇與挑戰。現在我們就來聊聊設計模式吧。學了這麼久的設計模式,你有什麼感想嗎?今天我們來總結一下設計模式吧!”
小A:“剛開始學習設計模式的時候,感到這些模式真的非常抽象。在設計過程中,我發現了很多設計模式的用處,也確實應用了很多設計模式,這讓我越來越感到設計模式的重要性。”
大B:“設計模式是個好東西,它給出了很多設計中的技巧與思路,對於很多優秀的設計,加以總結與提煉。設計模式並非是人拍腦瓜想出來的,而是他們搜集了其他人優秀的設計,加以整理出來的,他們不是這些模式的創造者,僅僅是整理者。”
小A:“應用設計模式還給我們帶來了很多好處。”
大B:“是啊!軟件將變得更加靈活,模塊之間的耦合度將會降低,效率會提升,開銷會減少。更重要的,設計模式就好像美聲唱法中的花腔,讓你的設計更加漂亮。總的來說,設計模式似乎將軟件設計提升到藝術的層次。”
小A:“設計模式已經被廣泛的應用了,在現在很多的圖形界麵框架都使用了MVC模式,大量跌代器模式的應用,徹底改變了我們對集合的操作方式。不僅如此,應用了設計模式的設計,往往被看成為優秀的設計。這是因為,這些設計模式都是久經考驗的。”
大B:“在學習和使用設計模式的時候,往往出現一個非常嚴重的誤區,那就是設計模式必須嚴格地遵守,不能修改。但是設計模式不是設計模型,並非一成不變。正相反,設計模式中最核心的要素並非設計的結構,而是設計的思想。隻有掌握住設計模式的核心思想,才能正確、靈活的應用設計模式,否則再怎麼使用設計模式,也不過是生搬硬套。”
小A:“當然!掌握設計模式的思想,關鍵是要仔細研究模式的意圖和結構。一個模式的意圖,就是使用這個設計模式的目的,體現了為什麼要使用這個模式,也就是需求問題。”
大B:“是啊!這個模式的結構,就是如何去解決這個問題,是一種手段、一種經典的解決方法,這種解決方法隻是一種建議。兩個方麵結合起來,明白為什麼需要設計模式,同時明白了如何實現這個模式,就容易抓住模式的本質思想。”
大B:“在抓住意圖和結構的基礎上,實踐也是掌握設計模式的必要方法。”
大B:“當然,設計模式必須在某個場景下得到應用才有意義,這也是為什麼要提供大量的例子用來說明模式的應用場景,這實際上是提供了一種上下文環境。學外語不是要強調‘語言環境’麼,學習設計模式也是這樣。”
小A:“嗯!是的。”
大B:“看到網上很多人在討論設計模式,他們確實很有創意,滿嘴都是模式的名字,恨不得寫個HelloWorld都要應用到設計模式。設計模式確實是好東西,但是,中國有句古話叫作物極必反,即便是按照辯證法,事物總要一分為二的看。”
小A:“是啊!我們說設計模式的目的是為了讓軟件更加靈活,重用度更高。”
大B:“但是,某種意義上,設計模式增加了軟件維護的難度,特別是它增加了對象之間關聯的複雜度。”
小A:“嗯。對!”
大B:“我們總說,重用可以提高軟件開發的效率。如果你是大牛,你自然希望你的設計可以被反複使用10000年,那就是:當世界毀滅的時候,你的設計依然存在。然而,現實是一個係統的設計往往在5年之內就會被拋棄,這是因為:1、軟件技術產生了新的變化,使用新的技術進行的設計,無論如何都比你的設計好;2、硬件環境發生了很大變化,你的設計裏對開銷或者效率的追求已經沒有意義了;3、新的大牛出現了,並且取代了你的位置。”
大B:“應用設計模式會導致設計周期的加長,因為更複雜了,但是很多項目還在設計階段就已經胎死腹中,再好的設計也沒有發揮的餘地。”
大B:“當我們向設計模式頂禮膜拜的時候,我們還必須清醒地看到軟件生產中非技術層麵上的東西往往具有決定性作用。理想固然崇高,但現實總是殘酷的。如何看清理想與現實的界限,恐怕是需要我們在實踐中不斷磨礪而體會出來的。在看完設計模式後,不妨反問以下自己,這些模式究竟能給你帶來什麼?”
(本章完)