以前做項目的時候并沒有想過用過采用什麼樣的設計模式進行開發。唯一用過的模式也就是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級了,先複習...