可扩展的Java应用程序开发模式
作者:网络转载 发布时间:[ 2012/8/24 9:48:12 ] 推荐标签:
正如你看到的,这更加简单而且完全是可扩展的。
但我们还有要做的事情。现在我们写了三个单选按钮类,它们知道如何载入一个列表框。在我们匆忙地想要从主类之外得到消息时,我们要求每个按钮都知道列表框。如果我们想要改成一个不同的显示方式,必须修改这三个类。
如果我们在按钮和列表之间创建一个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);
}
}
你看,我们使用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 JList
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11