偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

J2EE設(shè)計(jì)模式之State模式

開(kāi)發(fā) 后端
本文通過(guò)實(shí)例介紹了J2EE設(shè)計(jì)模式中的State模式。實(shí)例分別覆蓋了接口類,接口的實(shí)現(xiàn)類,即State接口的實(shí)現(xiàn),以及該設(shè)計(jì)模式的使用方法。

設(shè)計(jì)模式,這個(gè)概念現(xiàn)在是滿天飛,大家手里面估計(jì)都有,Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, in the book "Design Patterns - Element of Re-Useable Object-Oriented Software",這本書(shū)。根據(jù)其中的說(shuō)法,有三種,創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式。一共包括23個(gè)模式,在這里不一一列舉。實(shí)際應(yīng)用中,我們不可能在短時(shí)間內(nèi)消化吸收掉,因?yàn)槟J奖旧砭褪羌s定俗成的東西,依靠大家以往的項(xiàng)目經(jīng)驗(yàn)總結(jié)出來(lái)的習(xí)慣用法。習(xí)慣要時(shí)間去培養(yǎng),去形成,所以大家不要急著去用所有的模式,但一定要有這種意識(shí),在項(xiàng)目中、學(xué)習(xí)中開(kāi)始用上幾個(gè)看看,研究研究模式給你會(huì)帶來(lái)什么價(jià)值。但如果,你對(duì)Java JDK1.4 源碼用到的設(shè)計(jì)模式感興趣,可以到官方網(wǎng)站下載!

在進(jìn)入正題之前,我申明該文章沒(méi)有任何商業(yè)目的,其中涉及到開(kāi)源軟件的一些源代碼,所以涉及到知識(shí)產(chǎn)權(quán)問(wèn)題時(shí),如果有人將其用于商業(yè)目的,個(gè)人不負(fù)責(zé)該方面的責(zé)任。在這里只用于學(xué)習(xí)、交流的目的。謝謝合作。

但問(wèn)題出來(lái)了,如何將這些模式具體用到Java Project中呢?剛開(kāi)始確實(shí)很頭疼。一方面,我們要知道模式的適用場(chǎng)合、引入模式給系統(tǒng)帶來(lái)的好壞,等等都需要我們?nèi)タ紤]的。另一方面,模式本身的理解消化吸收。再者,還有你的老板逼著你完成任務(wù)-:)。等等。其實(shí),冷靜分析一下,也不是沒(méi)有可能。我們?cè)陧?xiàng)目中,完成自己的工作是一方面,但另一方面要考慮好自己的職業(yè)生涯,要想把Java Coder、Java Developer、Java Architect、或者什么的……做好,這些都是基本功。

學(xué)者,就是喜歡把1+1,這么簡(jiǎn)單的問(wèn)題用什么。。。。理論推導(dǎo)出來(lái),作為技術(shù)工作者,比如我們,看的是結(jié)果,技術(shù)的實(shí)作性。而大家在學(xué)設(shè)計(jì)模式中的過(guò)程中,往往脫離實(shí)踐,看看設(shè)計(jì)模式的UML圖(說(shuō)句實(shí)在話,大家的UML功底都不會(huì)太好吧,把它用于我們的UP估計(jì)也少。)、還有模式的什么意圖,別名,動(dòng)機(jī),適用性,結(jié)構(gòu),參與者,協(xié)作,效果,實(shí)現(xiàn),代碼實(shí)例,。。。。。。。腦袋都暈掉了。大家是否給忘記了,這種GP,本來(lái)

就很抽象,加上這么多條條框框,兩個(gè)字,“郁悶”。我們不妨從分析GP代碼入手效果很很不錯(cuò),我學(xué)習(xí)過(guò)程中就是這樣的。要不我們現(xiàn)在就看看一個(gè)例子。以行為型模式State為例。(模式的實(shí)現(xiàn)例子網(wǎng)絡(luò)上有很多。Java的實(shí)現(xiàn)也很多,比如,Together ControlCenter里面就內(nèi)置了這種基于GP的編程模板,詳細(xì)內(nèi)容大家用用就知道了。)

大家知道,State的用意在于,允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。對(duì)象看起來(lái)似乎修改了他的類。我們先看http://www.javacoder.net/patterns.jsp 上提供的GOF SOFTWARE DESIGN PATTERNS CATALOGUE的State模式源碼實(shí)現(xiàn)。

首先看接口類,State.java

  1.   public interface State {  
  2.  
  3.   public void handle();  
  4.  
  5.   }  
  6.  

以定義接口以封裝與Conext(代碼稍候陳述!)的一個(gè)特定狀態(tài)相關(guān)的行為。

然后看,接口的實(shí)現(xiàn)類。***個(gè),ConcreteState1.java

  1.   public class ConcreteState1 implements State {  
  2.  
  3.   public void handle() {  
  4.  
  5.   System.out.println("ConcreteState1.handle() executing");  
  6.  
  7.   }  
  8.  
  9.   }  

第二個(gè),ConcreteState2.java

  1.   public class ConcreteState2 implements State {  
  2.  
  3.   public void handle() {  
  4.  
  5.   System.out.println("ConcreteState2.handle() executing");  
  6.  
  7.   }  
  8.  
  9.   }  

這兩個(gè)類實(shí)現(xiàn)了State接口。

然后再看,Context.java是如何將上述三個(gè).java文件聯(lián)系起來(lái)。

  1.   public class Context {  
  2.  
  3.   public static final int STATE_ONE = 0;  
  4.  
  5.   public static final int STATE_TWO = 1;  

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

  1.   private State currentState = new ConcreteState1();  
  2.  
  3.   public void request() {  
  4.  
  5.   currentState.handle();  
  6.  
  7.   }  
  8.  
  9.   public void changeState(int state) {  
  10.  
  11.   switch (state) {  
  12.  
  13.   case STATE_ONE:  
  14.  
  15.   currentState = new ConcreteState1();//關(guān)鍵點(diǎn)  
  16.  
  17.   break;  
  18.  
  19.   case STATE_TWO:  
  20.  
  21.   currentState = new ConcreteState2();//關(guān)鍵點(diǎn)  
  22.  
  23.   break;  
  24.  
  25.   }  
  26.  
  27.   }  
  28.  
  29.   }  

這樣,寫(xiě)好4個(gè).java文件后,其實(shí)您已經(jīng)實(shí)現(xiàn)了State設(shè)計(jì)模式,很有趣,對(duì)吧?就是這樣簡(jiǎn)單。

再看看如何使用該設(shè)計(jì)模式了。寫(xiě)一個(gè)Client.java看看。

  1.   public class Client {  
  2.  
  3.   public static void main(String[] args) {  
  4.  
  5.   // 構(gòu)造Context  
  6.  
  7.   Context ctx = new Context();  
  8.  
  9.   // 喚起Context.request()  
  10.  
  11.   ctx.request();  
  12.  
  13.   // 改變ctx的狀態(tài)?為什么改變了呢?大家想想看。  
  14.  
  15.   ctx.changeState(Context.STATE_TWO);  
  16.  
  17.   // 再次喚起Context.request(),結(jié)果大不一樣。  
  18.  
  19.   ctx.request();  
  20.  
  21.   }  
  22.  
  23.   }  

【編輯推薦】

  1. 簡(jiǎn)析J2EE應(yīng)用程序中數(shù)據(jù)庫(kù)類的設(shè)計(jì)模式
  2. J2EE設(shè)計(jì)模式之Template
  3. 如何優(yōu)化JavaScript腳本的性能
  4. J2EE之DAO設(shè)計(jì)模式簡(jiǎn)介與實(shí)例
  5. 簡(jiǎn)析J2EE應(yīng)用程序中數(shù)據(jù)庫(kù)類的設(shè)計(jì)模式
責(zé)任編輯:book05 來(lái)源: 百度博客
相關(guān)推薦

2009-06-11 17:19:47

J2EE設(shè)計(jì)模式Template

2009-06-11 17:11:07

J2EE設(shè)計(jì)模式工廠模式

2009-06-23 08:06:46

J2EE體系架構(gòu)J2EE模型J2EE設(shè)計(jì)模式

2009-06-11 17:13:44

J2EE設(shè)計(jì)模式Dao設(shè)計(jì)模式

2009-06-11 17:24:46

J2EE的MVC體系結(jié)J2EE設(shè)計(jì)模式

2009-06-10 14:10:23

J2EE學(xué)習(xí)J2EE是什么

2009-06-23 16:42:50

用J2EE做網(wǎng)站

2009-06-10 13:37:06

J2EE可伸縮性J2EE靈活性J2EE維護(hù)

2009-06-11 17:06:11

J2EE歷史Java EE概述

2009-06-23 16:48:26

J2EE常見(jiàn)問(wèn)題J2EE平臺(tái)

2009-06-22 17:05:41

Java EEJava企業(yè)應(yīng)用

2009-06-22 17:34:40

J2EE架構(gòu)

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-23 08:12:48

J2EE調(diào)用存儲(chǔ)過(guò)程

2009-06-22 16:21:02

J2EE線程

2009-06-18 16:13:14

J2EE開(kāi)發(fā)

2009-06-19 10:20:00

J2EE開(kāi)發(fā)模式

2009-09-23 17:11:18

數(shù)據(jù)持久層Hibernate

2009-06-11 17:22:36

J2EE數(shù)據(jù)庫(kù)類

2009-06-19 17:03:44

J2EE學(xué)習(xí)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)