Java MVC体系结构
我正在用RMI开发一个电子邮件客户机/服务器java应用程序。我设计了基于MVC架构的客户端。特别是,我已将控制器注册为视图事件侦听器,因此,例如,如果我按下视图的“收件箱”按钮,控制器可以通过服务器本身的存根下载来自服务器的传入电子邮件 所有这一切的结果是,控制器在按下的按钮名称上充满了条件代码块,这是非常糟糕的。有人能给我推荐一种替换条件块的方法吗?我考虑过使用一些设计模式,但我不知道在这种情况下哪一种是最好的Java MVC体系结构,java,design-patterns,model-view-controller,Java,Design Patterns,Model View Controller,我正在用RMI开发一个电子邮件客户机/服务器java应用程序。我设计了基于MVC架构的客户端。特别是,我已将控制器注册为视图事件侦听器,因此,例如,如果我按下视图的“收件箱”按钮,控制器可以通过服务器本身的存根下载来自服务器的传入电子邮件 所有这一切的结果是,控制器在按下的按钮名称上充满了条件代码块,这是非常糟糕的。有人能给我推荐一种替换条件块的方法吗?我考虑过使用一些设计模式,但我不知道在这种情况下哪一种是最好的 谢谢 假设视图上有两个按钮,分别为“发送”和“关闭” 我认为最好在控制器内部有两
谢谢 假设视图上有两个按钮,分别为“发送”和“关闭” 我认为最好在控制器内部有两种方法,例如
controller.onCloseClicked()
和controller.onSendClicked()
。这样,您可以使用两个选项:
为什么更好?有时,您不仅需要发送事件,还需要从ui(视图)向控制器发送一些数据包。当每个动作有一个方法时,处理起来更容易。而不是编写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){
// ....
}
}
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
controller.action1();
}
});
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
controller.action2(ae);
}
});
现在,您可以使用匿名ActionListener
委托给正确的方法。例如
public class Controller {
public void action1(){
// ....
}
public void action2(ActionEvent ae){
// ....
}
}
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
controller.action1();
}
});
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
controller.action2(ae);
}
});
在Java8中,可以使用方法引用或lambda表达式
Controller controller = new Controller();
btn1.addActionListener(controller::action1);
btn2.addActionListener(ae -> controller.action2());
注册N个监听器,每个按钮一个。如何注册?例如,假设视图中有类似的内容:btn1.addActionListener(控制器);btn2.addActionListener(控制器);btn3.addActionListener(控制器);但是控制器类只能实现一个actionPerformed方法。如果你发布代码而不是描述它,那么会更容易帮助请发布视图的代码,我会尝试帮助如果控制器正在执行视图逻辑,那么它不是MVC。超级简单和干净!谢谢!