天天看點

設計模式

  以前做項目的時候并沒有想過用過采用什麼樣的設計模式進行開發。唯一用過的模式也就是mvc的開發模式了。但是當初對mvc模式了解的也是很片面。為了提高程式的運作效率,或者是對程式進行更進一步的優化,合理的設計模式是十分重要的。

  

設計模式

 來自百度百科

mvc 是一種使用 mvc(model view controller 模型-視圖-控制器)

model(模型)表示應用程式核心(比如資料庫記錄清單)。

view(視圖)顯示資料(資料庫記錄)。

controller(控制器)處理輸入(寫入資料庫記錄)。

mvc 模式同時提供了對 html、css 和 javascript 的完全控制。

    (模型)是應用程式中用于處理應用程式資料邏輯的部分。

通常模型對象負責在資料庫中存取資料。

  (視圖)是應用程式中處理資料顯示的部分。

   通常視圖是依據模型資料建立的。

    (控制器)是應用程式中處理使用者互動的部分。

通常控制器負責從視圖讀取資料,控制使用者輸入,并向模型發送資料。

 其中最典型的mvc就是jsp + servlet + javabean的模式。用javaee做過網站的都知道,structs架構就是采用的mvc的設計模式。

設計模式
設計模式
設計模式
設計模式
設計模式
設計模式
設計模式
設計模式

   觀察者模式定義了一個一對多的依賴關系,讓一個或多個觀察者對象監察一個主題對象。這樣一個主題對象在狀态上的變化能夠通知所有的依賴于此對象的

那些觀察者對象,使這些觀察者對象能夠自動更新。

設計模式

 java觀察者模式

1.建立被觀察者類,它繼承自java.util.observable類;

2.建立觀察者類,它實作java.util.observer接口;

3.對于被觀察者類,

   添加它的觀察者:

void addobserver(observer o)

addobserver()方法把觀察者對象添加到觀察者對象清單中。

當被觀察事件發生時,執行:

setchanged();

notifyobservers();

setchange()方法用來設定一個内部标志位注明資料發生了變化;

   notifyobservers()方法會去調用觀察者對象清單中所有的observer的update()方法,通知它們資料發生了變化。

   隻有在setchange()被調用後,notifyobservers()才會去調用update()。至于為什麼可以看一下下面的源碼。

設計模式
設計模式

4.對于觀察者類,實作observer接口的唯一方法update

void update(observable o, object arg)

形參object arg,對應一個由notifyobservers(object arg);傳遞來的參數,當執行的是notifyobservers();時,arg為null。

   1.生産者充當被觀測的對象,生産者可以生産的水果如下。

設計模式
設計模式

   2.多個消費者充當觀察者,每個消費者觀察不同的水果生産情況

設計模式
設計模式

  3.生産者(被觀察者)随機生産水果,通知消費者(觀察者)進行消費

設計模式

     if(pf.getclass() == producefruit.class) system.out.println(true);

設計模式

    最典型的就是swing架構的jbutton的實作。jbutton繼承自abstractbutton,在abstractbutton中維護了一組監聽器,它們就扮演者被觀察的角色。而abstractbutton本身就是被觀察對象。監聽器actionlistener并不是依靠循環監聽去擷取按鈕何時被單擊,而是當按鈕被單擊時,通過abstractbutton的fireactionperformed()方法回調actionlistener.actionperformed()方法實作。基于這種結構,在應用程式開發時,隻要簡單的實作actionlisterner接口(也就是observer),并将其添加到按鈕的觀察者清單中,那麼當單擊事件發生就可以自動促發監聽器的業務處理函數。

設計模式
設計模式

  2.以下是abstractbutton中的一段處理代碼

設計模式
設計模式

   寫到這裡,不得不說一下mvc模式和觀察者模式結合的小例子。long long ago,我用c寫了一個貪吃蛇的小遊戲,沒有什麼技術含量,當時并沒有考慮用什麼樣的設計模式去寫,而是想怎麼寫就怎麼寫,最終完成了。我知道這樣的寫法非常的不好,尤其是出現bug的時候,調試起來是非常的麻煩。基于上面的兩個設計模式,看一下“貪吃蛇”新的設計思路。

設計模式
設計模式

  2.view,并充當觀察者

設計模式
設計模式

  3.controler,将model和view結合起來

設計模式
設計模式

  最後通過主函數,建立snakecontrol對象就可以是整個程式跑起來了。設計方法很重要,最後就是一步一步的完善了。關于設計模式就先寫到這裡了,過幾天再完善,要考6級了,先複習...