快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
e Command{   public void execute(); }

我们将三个单选按钮扩展成特定的带有Command接口的类,我们就可以把对命令的执行从JFrame类转移到每个按钮的类。同时,我们创建一个叫做SexButton的基类,并将ActionListener代码移到基类中,这样就不需要分别在每个按钮中添加事件监听器:

//abstract radio button class public abstract class SexButton extends JRadioButton implements Command{   protected Swimmers simmers;   //JawList is a subclass of JScrollPane contained a JList;   protected JawList kidList;   public SexButton(String title,Swimmers sw,   JawList klist,ActionListener al){    super(title);    swimmers=sw;    kidList=klist;    addActionListener(al);   }   //abstract execute method   public abstract void execute(); }

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

时间:2010-12-24

注意这个类必须被扩展以使得它有用,因为我们没有具体化execute()方法。这个基本的抽象按钮类只是我们从中导出的具体类的一个模板,这实际也是模板设计模式的一个简单例子。

//radio button to select female swimmers public class FemaleButton extends SexButton{   public execute(){    Vector v=swimmers.getList(true);    loadList(v);   }   private void loadList(Vector v){    kidList.clear();    for(int i=0;i   Swimmer swm=(Swimmer)v.elementAt(i);     kidList.add(swm.getName());    }   } }

现在,来看一下我们完成的工作。所有的按钮都成为了Command按钮了,actionPerformed()方法也简化成下面这样简单的方法:

public void actionPerformed(ActionEvent e){   Command cmd=(Command)e.getSource();   cmd.execute(); }

正如你看到的,这更加简单而且完全是可扩展的。

但我们还有要做的事情。现在我们写了三个单选按钮类,它们知道如何载入一个列表框。在我们匆忙地想要从主类之外得到消息时,我们要求每个按钮都知道列表框。如果我们想要改成一个不同的显示方式,就必须修改这三个类。

如果我们在按钮和列表之间创建一个mediator(调停者)类就会好得多,因为它们彼此不需要知道对方。Mediator(调停者)设计模式能够做到这一点。当一个按钮被点击时,我们创建一个调停者类载入列表。这样所有按钮只知道调停者,哪个列表被载入也只有调停者才知道,当我们想要改成一个不同的显示方式就只需修改Mediator:

public class Mediator{   private JawList kidList;   public Mediator(JawList klist){    kidList=klist;   }   public void loadList(Vector v){    kidList.clear();    for(int i=0;i   Swimmer sw=(Swimmer)v.elementAt(i);     kidList.add(sw.getName());    }   } }

这样我们的基类变成这样:

public abstract class SexButton extends JRadioButton implements Command{   protected Swimmers swimmers;   protected Mediator med;   public SexButton(String title,Swimmers sw,Mediator md,ActionListener al){    super(title);    swimmers=sw;    med=md;    addActionListener(al);   }   public abstract void execute(); }

而FemalButton则变成这样:

public class FemaleButton extends SexButton{   //use the mediator to load the list   public void execute(){    Vector v=swimmers.getList(true);    med.loadList(v);   } }

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

时间:2010-12-24

你看,我们使用Mediator来分离按钮和列表,使它们互相不知

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号