[英]Should action listeners be in the class they apply to?
我正在对具有多个类的Web浏览器进行编程。 一类是“导航栏”,其中包含大多数按钮,例如搜索,后退,前进等。导航栏类具有动作侦听器,当按下搜索按钮时,该动作侦听器将变为活动状态,并导致生成URL,该URL需要传递给JEditorPane,但编辑器窗格在另一个类“编辑器”中。
在navbar内实例化编辑器没有意义,因此如何将变量从navbar类传递给编辑器类?
在这种情况下可以使用静态方法吗?
为什么不简单地给导航栏提供对编辑器的引用? 如果首先实例化了编辑器,则可以在构造函数中完成此操作,也可以通过getter / setter对(实际上,只需要setter即可)。 如果导航栏具有此类引用,则可以从侦听器实现中调用适当的方法。
class Editor { ... }
class NavBar implements ActionListener
{
public NavBar(Editor editor)
{
myEditor = editor;
}
public void actionPerformed (ActionEvent e)
{
// call methods of myEditor
}
private Editor myEditor;
}
Editor theEditor = new Editor();
NavBar theNavBar = new NavBar(theEditor);
您可以在这些之间使用某种中间接口,通常是类似服务的层。 基本上,观察者模式也是如此。 编辑器可以列出导航栏产生的事件,但这也意味着以后您还可以在其他组件中捕获这些事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.