我正在使用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());

09-25 19:29