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(); }
//the Command interface public interface 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;
//abstract execute method public abstract void execute(); } 注意这个类必须被扩展以使得它有用,因为我们没有具体化execute()方法。这个基本的抽象按钮类只是我们从中导出的具体类的一个模板,这实际也是模板设计模式的一个简单例子。
//radio button to select female swimmers public class FemaleButton extends SexButton{ public execute(){ Vector v=swimmers.getList(true); loadList(v); }