歡迎您光臨本站 註冊首頁

J2EE設計模式之State模式

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

設計模式,這個概念現在是滿天飛,大家手裡面估計都有,Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, in the book "Design Patterns - Element of Re-Useable Object-Oriented Software",這本書.根據其中的說法,有三種,創建型模式、結構型模式和行為型模式.一共包括23個模式,在這裡不一一列舉.實際應用中,我們不可能在短時間內消化吸收掉,因為模式本身就是約定俗成的東西,依靠大家以往的項目經驗總結出來的習慣用法.習慣要時間去培養,去形成,大家不要急著去用所有的模式,但一定要有這種意識,在項目中、學習中開始用上幾個看看,研究研究模式給你會帶來什麼價值.但如果,你對Java JDK1.4 源碼用到的設計模式感興趣,可以到官方網站下載!

在進入正題之前,我申明該文章沒有任何商業目的,其中涉及到開源軟體的一些源代碼,涉及到知識產權問題時,如果有人將其用於商業目的,個人不負責該方面的責任.在這裡只用於學習、交流的目的.謝謝合作.

但問題出來了,如何將這些模式具體用到Java Project中呢?剛開始確實很頭疼.一方面,我們要知道模式的適用場合、引入模式給系統帶來的好壞,等等都需要我們去考慮的.另一方面,模式本身的理解消化吸收.再者,還有你的老闆逼著你完成任務-:).等等.其實,冷靜分析一下,也不是沒有可能.我們在項目中,完成自己的工作是一方面,但另一方面要考慮好自己的職業生涯,要想把Java Coder、Java Developer、Java Architect、或者什麼的……做好,這些都是基本功.

學者,就是喜歡把1 1,這麼簡單的問題用什麼....理論推導出來,作為技術工作者,比如我們,看的是結果,技術的實作性.而大家在學設計模式中的過程中,往往脫離實踐,看看設計模式的UML圖(說句實在話,大家的UML功底都不會太好吧,把它用於我們的UP估計也少.)、還有模式的什麼意圖,別名,動機,適用性,結構,參與者,協作,效果,實現,代碼實例,.......腦袋都暈掉了.大家是否給忘記了,這種GP,本來

就很抽象,加上這麼多條條框框,兩個字,「鬱悶」.我們不妨從分析GP代碼入手效果很很不錯,我學習過程中就是這樣的.要不我們現在就看看一個例子.以行為型模式State為例.(模式的實現例子網路上有很多.Java的實現也很多,比如,Together ControlCenter裡面就內置了這種基於GP的編程模板,詳細內容大家用用就知道了.)

大家知道,State的用意在於,允許一個對象在其內部狀態改變時改變它的行為.對象看起來似乎修改了他的類.我們先看

http://www.javacoder.net/patterns.jsp 上提供的GOF SOFTWARE DESIGN PATTERNS CATALOGUE的State模式源碼實現.

看介面類,State.java

public interface State {

public void handle();

}

以定義介面以封裝與Conext(代碼稍候陳述!)的一個特定狀態相關的行為.

然後看,介面的實現類.第一個,ConcreteState1.java

public class ConcreteState1 implements State {

public void handle() {

System.out.println("ConcreteState1.handle() executing");

}

}

    第二個,ConcreteState2.java

    public class ConcreteState2 implements State {

    public void handle() {

    System.out.println("ConcreteState2.handle() executing");

    }

    }

    這兩個類實現了State介面.

    然後再看,Context.java是如何將上述三個.java文件聯繫起來.

    public class Context {

    public static final int STATE_ONE = 0;

    public static final int STATE_TWO = 1;

    //大家注意,這句話很關鍵,該模式做手腳的地方!

    private State currentState = new ConcreteState1();


    [火星人 ] J2EE設計模式之State模式已經有246次圍觀

    http://coctec.com/docs/java/show-post-61464.html