论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
J2EE综合:J2EE相关设计模式讨论
 作者:佚名     2007-3-14 16:12:32        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

设计模式,这个概念现在是满天飞,大家手里面估计都有,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 源码用到的设计模式感兴趣,可以到官方网站下载!这个地方有详细说明,http://www.javaresearch.org/dn.jsp
    在进入正题之前,我申明该文章没有任何商业目的,其中涉及到开源软件的一些源代码,所以涉及到知识产权问题时,如果有人将其用于商业目的,个人不负责该方面的责任。在这里只用于学习、交流的目的。谢谢合作。
    好,接下来继续往下看。
    但问题出来了,如何将这些模式具体用到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();

    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();
    }
}

是不是您也想试试呢?要不自己动手运行一下看看就知道了。
大家分析完成后,就知道了State模式是如何巧妙的实现了”移花接木”,或者说狸猫换太子,等等都可以了。
到了这一步,对这个模式的分析还没有结束,您最好回到教科书,再看一遍,如果现在你看这个模式还有问题,我想我写得很失败!

复杂问题简单化!!!!!


责任编辑:lss
  相关新闻
TreeView 控件应用详解
浅析J2EE应用服务器中间件
J2EE技术-漫谈EJB在Java中的应用
【J2EE综合】——使用JMS队列
J2EE探索者:用JMS进行企业消息传递
把您从麻烦中解脱的JNDI在J2EE中的角色
J2SE:六大代码问题检验你的Java知识
Oracle Peeking绑定变量的控制
用JSF与BEEHIVE PAGE FLOW开发WEB应用
专家讲述J2EE中的多字节字符的处理
Oracle Peeking绑定变量的控制
用JSF与BEEHIVE PAGE FLOW开发WEB应用
Look and Feel---JAVA界面(换肤术)
J2EE Frameworks介绍
“快”在细节 J2EE程序的性能优化技巧
在JSE环境中使用Hibernate EntityManger
J2EE持久层框架-JDO 2.0 最终投票通过
在JSE环境中使用Hibernate EntityManger
J2EE中使用EntityBean和JDO的优缺点分析
使用 Java EE 实现松耦合的SOA应用程序
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号