最近在學習物件導向設計模式,gof的23種設計模式大概看了一遍,簡單總結一下,設計模式主要分為三種模式,分別是建立模式,結構模式,行為模式。
回過頭想一下具體有哪些模式,在什麼情況下用什麼設計模式,好像還是一頭霧水,但是我有幾點我卻印象深刻,下面就來說說我的感受。
什麼是設計模式,我認為設計模式就是前人在程式設計過程中總結出來的經驗,他不是憑空創造出來的。
為什麼要用設計模式呢?
設計模式的出現就是為了解決軟體的變化,因為世界上沒有不變的軟體,如果有那我想設計模式也就不存在了。剛才說設計模式是應對軟體的變化,軟體的變化給程式設計師帶來的最大的痛苦是什麼呢?我想是軟體修改某一處會牽一髮而動全身,也就是軟體的耦合度過高,設計模式的任務就是降低軟體模組之間的耦合度,盡量把模組之間的耦合降到最低。
那麼如何降低耦合呢?
我認為關鍵就是抽象出比較穩定或不變化的部分,將變化比較頻繁的部分提取出來進行封裝,也就是常說的封裝變化點,這是始終貫徹與23中設計模式的始終,我覺得也是設計模式的核心。
掌握了這個核心那麼至於使用什麼設計模式並不重要了,重要的是如何降低耦合以應對軟體的變化。
我不喜歡一上來就考慮用什麼設計模式,我倒是喜歡現來實現功能,然後用重構的方法來對程式進行重構,以降低程式之間的耦合,至於重構成什麼樣子,是否符合哪一種設計模式我並不關心,我所關心的是它能否很好的應對軟體的變化。
這讓我突然想起了《倚天屠龍記》中張三丰交張無忌太極拳的情節,張三丰先是刷了一套他自創的太極拳,張無忌由於天資聰慧看一遍就記下了所有的招式,可是張無忌在用太極拳和那個高手(忘了叫什麼了)過招時,並沒有發揮出太極拳的威力,於是張三丰就讓張無忌忘掉所有的招式(具體忘掉招數的過程很是搞笑),不要拘泥一招一式,見招拆招,最終張無忌戰勝了那個高手,這個情節告訴我們,太極拳其實並不是注重招式的,它的精髓就是一種思想,是以靜制動,四兩撥千斤的道理。
我想設計模式也類似於太極拳,它是一種思想,一種應對變化的解決思想,他更是一門藝術,更是一種境界,是一種以無招勝有招的境界。
以上就是我對設計模式的一些膚淺的理解,望批評指正!
設計模式無招勝有招之設計原則
這裡的設計原則是大家公認的六條設計原則,即 單一職能原則 開閉原則 依賴倒置原則 黎克特制替換原則 介面隔離原則 迪公尺特法則 其實前面設計方法中有些也是原則,但是不是公認的原則,就歸置到了設計方法中。關於這幾條的好的文章參見 我這裡再加幾句描述。這個幾條原則基本上也是解耦的原則。從解耦的角度看 單...
敏捷就是無招勝有招
摘自 敏捷究竟是什麼?敏捷到底是什麼?敏捷是關於以下三件事情的 1.最重要的,敏捷是一門社會工程學。這是敏捷最大的特點。它關注的是,如何以乙個團隊的形式開展工作,如何激勵團隊成員,如何相互合作等等。2.敏捷是輕量級的。rup完全依賴顯性知識,與此不同,敏捷還依賴隱性知識。在rup中,我們設法把我們認...
敏捷就是無招勝有招
摘自 敏捷究竟是什麼?敏捷到底是什麼?敏捷是關於以下三件事情的 1.最重要的,敏捷是一門社會工程學。這是敏捷最大的特點。它關注的是,如何以乙個團隊的形式開展工作,如何激勵團隊成員,如何相互合作等等。2.敏捷是輕量級的。rup完全依賴顯性知識,與此不同,敏捷還依賴隱性知識。在rup中,我們設法把我們認...