怎麼理解、學習設計模式
很多程式設計初學者會很奇怪設計模式是什麼,而且搞不懂為什麼要學設計模式,有什麼用,這篇文章用例子來簡單解答,使疑問者快速對設計模式有個大概的瞭解。
What is 設計模式:
--------【這部分為理論知識】------------
模式:
模式可以理解為做一件事情的套路。
設計模式:
通常說的設計模式是指GoF在《設計模式:可服用面向物件軟體的基礎》一書中提到的23種設計模式。
當然現在已經遠遠不止這23種設計模式,還有很多很多,並不斷有新的模式誕生,對於設計模式必須滿足大三律:一個解決方案必須在三個完全不同型別或者不同領域的系統中得以應用才有資格成為位候選模式。
四個基本要素:
- 模式名稱(助記名)
- 問題(何時用)
- 解決方案(組成部分怎麼設計)
- 效果(這樣設計的好壞)
----------------------------------------
Why we use 設計模式:
設計模式的作用
這部分用太理論的話說理解起來不好理解,下面舉幾個形象的例子:
【1】===========================
A:您好,KFC請點餐。
B:我要一份塗了沙拉醬的,中間夾上雞大腿肉,放上辣椒粉,夾上兩片生菜,再加上一片培根的雙層面包片,雞肉要先炸過,皮一定要脆。
A:What the f..k?
使用設計模式之後- - - - - - - - - - - - - - - - - - - - - - - -
A:您好,KFC請點餐。
B:我要一份香辣雞腿堡。
A:好的,請稍等。
這裡的漢堡型別可以說是一個設計模式(食物型別)。
【2】===========================
A:您好,請問您想吃哪種型別的火鍋?
B:我要那種一邊是加辣底料的湯,一邊是加清湯,兩邊一樣大,中間有東西隔開,圓圓的,可以加熱的那種。
A:Em...
使用設計模式之後- - - - - - - - - - - - - - - - - - - - - - - -
A:您好,請問您想吃哪種型別的火鍋?
B:鴛鴦鍋。
A:好的。
這裡的鴛鴦鍋可以說是一個設計模式(火鍋模式)。
【3】===========================
A:你喜歡什麼樣子的女生。
B:我喜歡的女生的樣子是長髮及腰,大眼睛,小鼻子高鼻樑,彎月眉毛,瓜子臉,櫻桃嘴巴,瘦瘦高高的。
使用設計模式之後- - - - - - - - - - - - - - - - - - - - - - - -
A:你喜歡什麼樣子的女生。
B:我喜歡美女。
這裡的美女可以說是一個設計模式。
===========================
總結:
(1)上面例子不很恰當但較形象,如果交流兩方AB有"共享詞彙",我們可以直接說這些共享詞彙(設計模式的名稱),而不必描述組成部分的具體細節,大大節省了交流成本,也比直接描述更清晰的表達自己的意思。
(2)設計模式可以使人們更方便的複用成功的設計模式和結構,比如一份漢堡裡夾哪些東西,作料怎麼放等等。
(3)設計模式可以使人們深入理解面向物件設計思想,提高軟體的開發效率節約成本。比如,如果一份雞腿堡需要2片生菜,那做10個雞腿堡時候,我準備20片生菜葉,每兩片分成一份,做的時候直接取就好了。
How to learn and use 設計模式:
- 需求驅動
- 分析成功的模式的應用場景
- 充分了解所使用的開發平臺
- 程式設計中領悟
- 避免設計過度
通俗解釋一下:
1、需求驅動:不要因為設計模式而用,設計模式是針對軟體開發的,軟體開發是針對需求的,不要生搬硬套使設計變得複雜難以除錯、維護,而是根據需求來確定【任何技術都是如此,比如我做了一個十幾個人訪問的網站,沒必要整個分散式、整個快取、資料庫分庫分表,這些只能浪費時間,提高開發維護成本,當然在學習階段還是可以嘗試的】。
2、分析成功的模式的應用場景:比如學習了單例模式,思考一下它在哪些場景會被用到。
3、充分了解所使用的開發平臺:雖然設計模式理論上是適用於任何語言的,但每種語言和平臺有自身的特點,需要結合相對應的平臺來使用,比如J2EE有反射和依賴注入。
4、程式設計中領悟:學了一種設計模式之後,不要只停留在理論,自己動手實現以下,能更好的理解類之間的耦合關係,是繼承還是包含還是其他關係。
5、避免設計過度:一定要牢記簡潔原則(KISS_keep it simple, stupid),設計模式是為了簡單,而不是為了把簡單問題複雜化,必須把握需求的變化程度,區分需求的穩定部分和可變部分,過度設計和設計不足都對專案不利!
GoF的23種設計模式:
設計模式、框架、架構 區別?
設計模式:解決特定問題的,範疇小,針對性強。
框架:如果說設計模式是解決特定問題,那麼框架解決問題的領域就大多了,比如SSM框架:我設計一個線上考試系統可以用它,進銷存系統可以用它, 購物網站可以用它,線上音樂也可以用它。一個框架裡面可能會用到多種設計模式。框架比架構更具體,更偏技術。
架構:一個架構可以包含多種框架,比如 一個購物網站的架構 :資料層使用xx框架、業務邏輯層使用xx框架、表現層使用xx框架。