·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|汽车|学院|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|游戏|考试|报价
可扩展的Java应用程序开发模式
http://dev.21tx.com 2005年03月28日 Java研究组织 CrazyDiamond

上一页 1 2

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

  如果我们在按钮和列表之间创建一个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<v.size();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);
 }
}

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

  除了可以使用命令、调停者、模板模式改进这个不到100行的Java代码的简单程序外,还可以使用观察者(Observer)模式。这个程序使用JListData将数据传给列表并从列表中获得数据,并用LawList观察JListData的变化。

public class JListData extends AbstractListModel{
 private Vector data;

 public JListData(){
  data=new Vector();
 }

 public int getSize(){
  return data.size();
 }

 public Object getElementAt(int index){
  return data.elementAt(index);
 }

 public void addElement(String s){
  data.addElement(s);
  fireIntervalAdded(this,data.size()-1,data.size());
 }

 public void removeElement(String s){
  data.removeElement(s);
  fireIntervalRemoved(this,0,data.size());
 }

 public void clear(){
  int size=data.size();
  data.clear();
  fireIntervalRemoved(this,0,size);
 }
}

public class JawList extends JScrollPane{
 private JList listwindow;
 private JListData listContents;

 public JawList(){
  listContents=new JListData();
  listwindow=new JList(listContents);
  getViewport().add(listwindow);
 }

 public void add(String s){
  listContents.addElement(s);
 }

 public void remove(String s){
  listCotents.removeElements(s);
 }

 public void clear(){
  listContents.clear();
 }
}

上一篇: 深入浅出基于Java的代理设计模式
下一篇: Decorator模式中遭遇继承与聚合的冲突

上一页 1 2

英特尔 酷睿(TM)2双核,送指纹识别器一个,再赠两份好礼,请电800-858-2418

Google
 
热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
晨新科技 版权所有 Created by TXSite.net