如何學習設計模式

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   使用   java   ar   strong   

GoF的[設計模式]是經典著作,有人看了好多遍仍然說沒有看懂,許多人看懂了一些模式但不知道如何應用……這裡,yqj2065拋磚引玉,討論一下如何學習設計模式。

①    學習技巧

學習設計模式時,有一些技巧能夠協助你快速理解設計模式。

a)        使用較簡單的物件導向的語言如Java、C#。GoF的[設計模式]實質上是物件導向的設計模式。[GoF·1.1]中提到“程式設計語言的選擇非常重要,它將影響人們理解問題的出發點”。從學習設計模式的角度看,Java和C#較C++更容易一些。比如Java介面等,能夠更有效展現設計模式的意圖。

b)       使用工具BlueJ。BlueJ最大的好處,就是提供了簡單的類圖。正如我在簡明設計模式Java中所做的,較少去專門畫類圖,而是在BlueJ中。在學生上機編寫示範程式時,常常先看他的類圖,以判斷他的程式是否正確,必要時再看原始碼。

c)        日常生活的隱喻。用一些實際生活中的例子來說明某某模式,能夠讓你快速掌握某模式的目的和實現代碼的結構。同時,你要認識到,這種隱喻如同告訴你(2+3)2=22+2*2*3+32,你需要自己舉一反三,得出(a+b)2=a2+2ab+b2。在實際工作中的模式的具體應用,則相當於應用代數公式。

d)       動手實踐和懷疑精神。看顯淺的參考書或上網查閱資料時,要自己敲(複製也可以)代碼並運行,要多修改別人的原始碼提出自己的觀點:為什麼書中不這樣設計、為什麼要那樣設計;如果增添一些方法、方法參數、或成員變數會如何?必須要自己親自動手,最起碼要運行。另外,要敢於向博主提問、拍磚。你甚至可以質疑GoF的某些章節的解說和意圖,更何況一些博主呢。

②    基礎知識

這些知識讓你知道,設計模式好在何處。

a)        物件導向範式。也就是人們傳說的思想。封裝、繼承和多態這些東西,在我看來比if、for等稍微高一點,也屬於文法問題。物件導向編程要掌握的三大原則是柏拉圖(Plato)原則、裡氏(Liskov)替換原則和Parnas原則。這三個原則其實非常簡單。任何原則,你覺得很難一見鐘情,很難快速認同,那它就不會是好原則。

b)       設計原則。許多人列舉了7大原則,如單一職責原則、開閉原則、裡氏代換原則、依賴倒轉原則、介面隔離原則、合成複用原則、迪米特法則。LSP,我將它提升為物件導向範式的3大基石之一;單一職責和介面隔離,主要作為物件導向分析/OOA時職責劃分所遵循的原則,此時你可以不太在意。依賴倒轉原則,我把它作為垃圾扔掉,因為開閉原則或者直接地說“依賴於抽象類別型原則”已經包含了依賴倒轉原則的精華,而依賴倒轉原則的糟粕由IoC繼承。當然,回調,我很強調。所以,你要掌握的有抽象依賴原則(OCP)、單向依賴原則(含對回調的學習)和最低依賴原則(合成複用原則、迪米特法則)。

c)        UML的初步瞭解。這是學習設計模式的工具。在早期,你甚至可以僅瞭解BlueJ的相關圖示,也就10分鐘的事情。

③    境界

《五燈會元》卷十七中,有一則唐朝禪師青原惟信禪師的語錄:“老僧三十年前未參禪時,見山是山,見水是水。及至後來親見知識,有個入處,見山不是山,見水不是水。而今得個休歇處,依前見山只是山,見水只是水。”

a)        仔細研究GoF的[設計模式],逐個學習其意圖和結構,是一個抱著字典學習英語的方式。見山是山,見水是水,導致你可能在實際工作中生搬硬套、東施效顰。

b)       建議從簡單的情境出發,自己發現或設計出某種模式。你從中體會該模式是如何解決問題的,這樣,該模式成為你自己的東西,你才不會出現知易行難的問題。所有的設計模式不過是基本原則和理念在特定場合的應用。你可能不知道某個設計模式的名字,但是你知道它一切的優缺點和變體以及應用場合。見山不是山,見水不是水。

c)        你對基本原則和理念融會貫通,你可以惋惜:“我找到一種模式,原來在[設計模式](其實是某個特殊的書、文章提到的模式)中早就有了這種模式”。這時,模式不模式又如何呢?反模式又怎樣。看見一個模式,你會說:“嗯,這是一種有用的模式”。見山只是山,見水只是水。

 

以上一點淺見。


如何學習設計模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.