我正在使用RMI开发电子邮件客户端/服务器Java应用程序。我基于MVC架构设计了客户端。特别是,我已将Controller注册为View事件侦听器,以便例如,如果按下View的“收件箱”按钮,则Controller可以通过服务器本身的存根从服务器下载传入的电子邮件。
所有这些的结果是,控制器上按了按下按钮的名称充满了条件代码块,这是非常糟糕的。谁能推荐我一种替换条件块的方法?我曾考虑过使用一些设计模式,但在这种情况下我不知道哪一种是最好的。
谢谢!!
最佳答案
而不是编写if / else语句
public class Controller implements ActionListener {
public void actionPerformed(ActionEvent ae){
if(....) {
// action1
} else if(...){
// action2
}
}
}
将每个分支放在自己的方法中。例如。
public class Controller {
public void action1(){
// ....
}
public void action2(ActionEvent ae){
// ....
}
}
现在,您可以使用匿名
ActionListener
委托给正确的方法。例如。btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
controller.action1();
}
});
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
controller.action2(ae);
}
});
在Java 8中,您可以使用方法引用或lambda表达式。
Controller controller = new Controller();
btn1.addActionListener(controller::action1);
btn2.addActionListener(ae -> controller.action2());