我有一个带有内部类的主类。这是一个摇摆/GUI应用程序。
我有与摇摆相关的内部类,例如扩展JPanel、JDialog等…
在内部类中,我有匿名类,例如操作侦听器,我必须设置并从外部类获取数据。
例如main类有内部类,而在内部类中,我有一个匿名侦听器类,如下所示:
public class Main extends JApplet {
//etc...
private class CTable extends JPanel {
CDialog td;
private JPopupMenu menu;
public CTable(String title, AbstractTableModel tableModel) {
//etc...
menu = new JPopupMenu();
JMenuItem menuItem = new JMenuItem("Test");
menu.add(menuItem);
//etc...
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
CTable.this.td = new CDialog("Test");
CTable.this.td.setVisible(true);
}
});
}
}
我唯一的问题是只与是否它的良好做法访问变量像这样:CTable.this.td=new CDialog(测试);CTable.this.td. setViable(真);…
我知道匿名内部类一直是Swing的习惯用法,但我从来不喜欢它们。
我个人认为监听器是控制器的一部分。我更喜欢Swing组件是纯粹的视图,让控制器实例化它们,并给它们需要的监听器,以充当控制器选择的角色。不要让视图不得不担心它如何与控制器通信或者它生活在哪里。
CTable.this.td.setVisible(true);
有一个叫做demeter定律的规则。这表明你应该只直接访问类。通过跨过几个对象来获取所需的方法,你在类之间创建了紧密的耦合,这使得将来更难更改单个类。
我为此建议的设计模式可能是Proxy类
。代理类充当两个类之间的缓冲区,意味着两个类都通过代理类相互通信