[搜狐博客搬家] 2012-01-03 設計模式之我見(一)

還記得兩年多前,老師給我講解工廠模式的時候,一臉茫然的我,不知道爲什麼要把簡單的東西複雜化,隨着時間的推移,慢慢的有了些瞭解,所以撰寫此文,希望以後還能有時間來進行補充吧.

(1)首先,我介紹一下模板方法模式

個人認爲,這個模式是最牛叉也是最常使用的模式.這個模式很早之前我就用過並且寫了一些心得,所以這裏就不重複說了,直接把原文copy過來(雖然消滅copy代碼是使用設計模式的目的之一^^)

這個設計模式是不錯的,但是什麼時候用呢?很簡單,你想"封裝"你的方法的時候!

我這麼說你可能會很疑惑,我具體的說一下吧,比如我們經常會用函數來封裝我們的邏輯,這個沒有問題吧,但是函數裏的參數都是基本數據類型或者對象,如果我想傳一個方法(當然方法也可以想象成對象)怎麼辦呢?

這時你又會問了,爲什麼需要傳一個方法呢?好,比如我們在做一件事的時候又太大的不確定性的時候用傳普通參數就不管用了,所以模板方式就是來將這種不確定抽取出來的

一般來說我們是這麼使用模板方式的,先定義一個父類,父類中定義了一件事情的抽象邏輯,也就是說他規定事情有哪些步驟,而這些步驟具體是怎麼實現的,交給子類去實現,當然父類也可以自己實現一些方法來實現代碼的複用,如果子類有自己的需求只需要覆蓋這個方法就可以了,所以我覺得模板方式的好處一個是使代碼更有條理了,而且也減少了代碼量,是一個非常不錯的模式,我個人覺得用這個設計的時候最好注意幾點,一個是準備的把握需求,合理的劃分方法,如果你覺得不知道怎麼把握的話,建議你把一件事情劃分的越細越好,但是如果實際中你發現你百密一疏還是有一個方法沒有劃出來怎麼辦?不用急,我們還有回調函數來解決這個問題,這種方式我們應該經常見到的,比如spring中,這個回調的方法就是爲了提供很好的靈活性,我這麼說有的人可能還是一頭霧水,所以希望大家自己多看看相關的書籍.

(2)代理模式

這個模式也是一個比較牛叉,而且經常使用的模式,使用這種模式可以不影響客戶端的前提下,對原來的方法增加一些行爲,而更加常用的方式是動態代理模式,繼而可以說到spring aop的實現了...(好像扯遠了),說說動態代理的實現吧,主要有兩種,一種是jdk中自帶的,還有一種是cglib,通過動態修改字節碼來實現,而應用的場景也十分廣泛,比如 動態代理客戶端做日誌,做事務,做運行時間統計,統一異常處理等等,這裏的應用是多樣化的,具體可以自己根據情況使用

(3)觀察者模式

觀察者模式是一種在一個對象發生了變化,其他依賴它的對象根據它的變化進行相應處理的一種模式,看到這裏你可能很自然的就想到了我們的消息中間件,嗯,沒錯的,如果你理解了消息中間件的作用,觀察者模式也基本上算是理解了,首先該模式中包括了被觀察者和觀察者,被觀察者就是那個被監控的對象,也就是可能發生變化的對象,而觀察者就是對被觀察者發生變化時需要作出響應的對象.觀察者模式有什麼好處呢??它可以幫助我們更好的實現觀察者與被觀察者之間的耦合,就好像消息中間件一樣,我把消息發出去就是了,至於哪些系統會用到這些消息,我是不關心的.而jdk對於觀察者的支持是很好的,我們可以通過繼承java.util.Observable來實現被觀察者,同時可以通過實現java.util.Observer接口來實現觀察者,具體網上有很多例子,我就不介紹了

(4)責任鏈模式(純)

責任鏈模式表示對於一個請求,可以有多個處理者,但是這些處理者是有順序的,而且一個請求要不就是被處理掉,要不就是被傳遞給下一個處理者,具體設計的時候,我們會先設計一個抽象類,這個抽象類有兩個特點,一個是"設置下一個鏈是誰"的方法,還有就是"在請求傳到自己的時候應該做什麼",有時我們可以用這個來改變if,else判斷

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章