快速业务通道

可扩展的Java应用程序开发模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

可扩展的Java应用程序开发模式

时间:2010-12-24

现在很多JAVA书籍,在介绍SWING的事件模型时,为了使JAVA初学者容易理解和上手,通常是在主类(自己的JFrame子类或JPanel)中做所有事情:要么由主类作为监听器,在接口的方法中通过判定事件源来决定具体做何事;要么在主类中使用内隐类来实现监听器,(因为内隐类可以方便的访问主类中的成员变量)。而很多JAVA初学者在往后的编程中也采用这种模式(至少我以前是这样的)。其实,这种做法虽然简单,却缺乏可读性、可扩展性和可维护性。之前我看到了一篇关于这个问题的文章(来自于《JavaPro》),现整理出来与大家分享。

下面我将用一个简单的例子来说明如何使用模式来解决这个问题。

现在,假设我们要编写一个使用几个单选按钮从一个长列表中选择不同分组的程序,就象下图中看到的。单击Female单选按钮时,只有女孩的名字被显示;当你点击Male按钮时,程序显示男孩的名字。

可扩展的Java应用程序开发模式 - 编程入门网

这个程序最简单的版本是在主类中做每件事情,主类包含一些持有孩子姓名的数组和向量(Vector),一个另一个最简单的方法是为每个孩子创建一个对象,每个对象有一个象isFemal()这样的方法来帮助我们确定要显示的是男的还是女的。在程序中我们把每个孩子的类称为Swimmer:

public class Swimmer{   private String name;   private int age;   private String club;   private boolean female;   public Swimmer(String name,int age,String club,boolean female){    this.name=name;    this.age=age;    this.club=club;    this.female=female;   }   public boolean isFemale(){    return female;   }   public String getName(){    return name;   }   public int getAge(){    return age;   }   public String getClub(){    return club;   } }

可扩展的Java应用程序开发模式(2)

时间:2010-12-24

下一步我们要做的是决定整个列表中的哪些孩子会被显示。我们可以在主用户接口类中做到这点,但是最好的是在一个叫做Swimmers的集合类中来做,这个类有一个getList()方法,它带有布尔型的参数来决定是男孩还是女孩:

//get a vector of swimmers who are (female) public Vector getList(boolean female){   Vector v=new Vector();   for(int i=0;i  Swimmer swm=(Swimmer)kids.elementAt(i);    if(swm.isFemal()==female) v.add(swm);   }   return v; }

我们又提供了一个不带参数的多态getList()方法来返回整个列表。

现在让我们进入程序中的第一个重要的部分,为了显示这些孩子的姓名,我们需要为三个单选按钮都添加一个事件监听器,使得每个都能显示出正确的孩子们:

public void actionPerformed(ActionEvent e){   //listen for button clicks and do the right thing   Object obj=e.getSource();   if(obj==female) loadFemales();   if(obj==male) loadMales();   if(obj==both) loadBoth(); } private void loadFemales(){   //display female swimmers   Vector v=swimmers.getList(true);   loadList(v); } private void loadMales(){   //display male swimmers   Vector v=swimmers.getList(false);   loadList(v); }

尽管这个方法在简单、小型的情况下工作得很好,但是它没有良好的可扩展性。如果你有10个按钮,扩展actionPerformed()方法来测试每个按钮和调用某些对应的操作,会使得可读性非常差。相反,我们最好在包含用户接口的类中去掉所有的判定。

做到这点的一个途径是使用Command模式。当我们使用这个模式的时候,需要我们创立一个Command接口:

//the Command interface public interfac

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号