我正在使用Java编写一个Blackjack应用程序,需要采用MVC架构。我已经完全编码了所有模型、视图和控制器,并且一切都运行得很完美。然而,我想知道将监听器附加到组件(例如JButton)的最佳方法是什么。
我的当前设计将所有需要侦听器的视图组件声明为public final。然后将视图传递给控制器。从那里,控制器可以完全访问组件并添加操作侦听器。代码示例:
因此,根据以上两种情况,哪一种方式更好呢?
谢谢。
我的当前设计将所有需要侦听器的视图组件声明为public final。然后将视图传递给控制器。从那里,控制器可以完全访问组件并添加操作侦听器。代码示例:
public class View extends JFrame {
public final JButton myBtn1 = new JButton("Button 1");
public final JButton myBtn2 = new JButton("Button 2");
public View() {
//constructor code here....
}
}
public class Controller {
private Model myModel;
private View myView;
public Controller(Model m, View v) {
myModel = m;
myView = v;
//now add listeners to components...
myView.myBtn1.addActionListener(new MyActionListener1());
myView.myBtn2.addActionListener(new MyActionListener2());
}
}
然而,我的一个朋友将他所有的JButton声明为私有作用域,然后在视图中创建公共方法来为它们各自的组件添加动作监听器。对我来说,这似乎只是浪费时间,增加了不必要的代码。代码示例:
public class View extends JFrame {
private JButton myBtn1 = new JButton("Button 1");
private JButton myBtn2 = new JButton("Button 2");
public View() {
//constructor code here....
}
public void myBtn1AddActionListener(ActionListener a) {
myBtn1.addActionListener(a);
}
public void myBtn2AddActionListener(ActionListener a) {
myBtn2.addActionListener(a);
}
//etc etc...
}
public class Controller {
private Model myModel;
private View myView;
public Controller(Model m, View v) {
myModel = m;
myView = v;
//now add listeners to components...
myView.myBtn1AddActionListener(new MyActionListener1());
myView.myBtn2AddActionListener(new MyActionListener2());
}
}
因此,根据以上两种情况,哪一种方式更好呢?
谢谢。