J2EE相關設計模式討論
J2EE相關設計模式討論[@more@] 設計模式,這個概念現在是滿天飛,大家手裡面估計都有,三種,建立型模式、結構型模式和行為型模式。一共包括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的用意在於,允許一個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了他的類。我們先看 上提供的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();
public void request() {
currentState.handle();
}
public void changeState(int state) {
switch (state) {
case STATE_ONE:
currentState = new ConcreteState1();//關鍵點
break;
case STATE_TWO:
currentState = new ConcreteState2();//關鍵點
break;
}
}
}
這樣,寫好4個.java檔案後,其實您已經實現了State設計模式,很有趣,對吧?就是這樣簡單。
再看看如何使用該設計模式了。寫一個Client.java看看。
public class Client {
public static void main(String[] args) {
// 構造Context
Context ctx = new Context();
// 喚起Context.request()
ctx.request();
// 改變ctx的狀態?為什麼改變了呢?大家想想看。
ctx.changeState(Context.STATE_TWO);
// 再次喚起Context.request(),結果大不一樣。
ctx.request();
}
}
是不是您也想試試呢?要不自己動手執行一下看看就知道了。
在進入正題之前,我申明該文章沒有任何商業目的,其中涉及到開源軟體的一些原始碼,所以涉及到智慧財產權問題時,如果有人將其用於商業目的,個人不負責該方面的責任。在這裡只用於學習、交流的目的。謝謝合作。
好,接下來繼續往下看。
但問題出來了,如何將這些模式具體用到Java Project中呢?剛開始確實很頭疼。一方面,我們要知道模式的適用場合、引入模式給系統帶來的好壞,等等都需要我們去考慮的。另一方面,模式本身的理解消化吸收。再者,還有你的老闆逼著你完成任務-:)。等等。其實,冷靜分析一下,也不是沒有可能。我們在專案中,完成自己的工作是一方面,但另一方面要考慮好自己的職業生涯,要想把Java Coder、Java Developer、Java Architect、或者什麼的……做好,這些都是基本功。
學者,就是喜歡把1+1,這麼簡單的問題用什麼。。。。理論推匯出來,作為技術工作者,比如我們,看的是結果,技術的實作性。而大家在學設計模式中的過程中,往往脫離實踐,看看設計模式的UML圖(說句實在話,大家的UML功底都不會太好吧,把它用於我們的UP估計也少。)、還有模式的什麼意圖,別名,動機,適用性,結構,參與者,協作,效果,實現,程式碼例項,。。。。。。。腦袋都暈掉了。大家是否給忘記了,這種GP,本來就很抽象,加上這麼多條條框框,兩個字,“鬱悶”。我們不妨從分析GP程式碼入手效果很很不錯,我學習過程中就是這樣的。要不我們現在就看看一個例子。以行為型模式State為例。(模式的實現例子網路上有很多。Java的實現也很多,比如,Together ControlCenter裡面就內建了這種基於GP的程式設計模板,詳細內容大家用用就知道了。)
大家知道,State的用意在於,允許一個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了他的類。我們先看 上提供的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();
public void request() {
currentState.handle();
}
public void changeState(int state) {
switch (state) {
case STATE_ONE:
currentState = new ConcreteState1();//關鍵點
break;
case STATE_TWO:
currentState = new ConcreteState2();//關鍵點
break;
}
}
}
這樣,寫好4個.java檔案後,其實您已經實現了State設計模式,很有趣,對吧?就是這樣簡單。
再看看如何使用該設計模式了。寫一個Client.java看看。
public class Client {
public static void main(String[] args) {
// 構造Context
Context ctx = new Context();
// 喚起Context.request()
ctx.request();
// 改變ctx的狀態?為什麼改變了呢?大家想想看。
ctx.changeState(Context.STATE_TWO);
// 再次喚起Context.request(),結果大不一樣。
ctx.request();
}
}
是不是您也想試試呢?要不自己動手執行一下看看就知道了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965489/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 討論設計模式和00思想設計模式
- 設計模式討論之abstract factory篇設計模式
- 關於“斯金納箱”及相關理論在遊戲設計中應用的討論遊戲設計
- GoF設計模式新手討論專用帖Go設計模式
- 設計模式討論之abstract factory篇 (轉)設計模式
- 程式設計方法論/架構設計/模式相關轉載連結彙總程式設計架構模式
- 關於業務元件相關架構的討論元件架構
- 設計模式的相關介紹設計模式
- 關於程式設計風格的討論 (轉)程式設計
- J2EE設計模式分析與實踐——J2EE技術新論 (轉)設計模式
- 關於網站設計的一點點討論網站
- 討論個有關模組化設計的問題
- 關於一個建立型模式的討論:模式
- 表結構設計討論
- 多執行緒程式設計相關理論執行緒程式設計
- J2EE中的設計模式設計模式
- 2、Python與設計模式–工廠類相關模式Python設計模式
- 關於aio的設定的討論AI
- Android設計模式探討--Builder模式Android設計模式UI
- Android設計模式探討 Builder模式Android設計模式UI
- [討論]“消滅”程式設計師?程式設計師
- Java設計模式1:設計模式概論Java設計模式
- 設計模式概論設計模式
- 設計模式總論設計模式
- [討論]J2EE專案自動生成工具
- Android設計模式探討--單例模式Android設計模式單例
- Android設計模式探討 單例模式Android設計模式單例
- 在專案中使用設計模式的淺見,歡迎大家討論:)設計模式
- 《Head First 設計模式》:與設計模式相處設計模式
- Ioc模式 Dependency Injection模式和AOP討論模式
- 關於oracle的share-nothing 和 share-disk HA相關討論Oracle
- DAO程式設計模式(J2EE) -轉載程式設計設計模式
- [技術討論]關於低耦合開發的討論
- 數論相關
- [技術討論]多使用者(多公司)的資料庫設計討論資料庫
- Explain For理論執行計劃相關AI
- 雲端計算相關論文目錄
- 電腦科學和Python程式設計導論(一) 計算機相關理論Python程式設計計算機