java通过构造函数传递参数
首先,我将简要介绍一些紧密耦合的类(虽然不是最坏的情况):
class setUpGUI {
...
JTextField output = new JTextField();
...
CountTimer ct;
...
public void setOtputText(String text) {
output.setText(text);
public startTimer() {
ct = new CountTimer();
}
...
}
class CountTimer implements ActionListener {
private String text = "";
private gui = new SetUpGUI();
...
@Override
public void actionPerformed(ActionEvent e) {
...
gui.setOtputText(text);
...
}
我的问题是关于第二个片段(与第一个片段相比,并就其本身):
// functionally equivalent to com.google.gwt.user.client.ui.HasText
interface HasText {
String getText();
void setText(String text);
}
class setUpGUI {
...
JTextField output = new JTextField();
...
CountTimer ct;
...
public void setOtputText(String text) {
output.setText(text);
public startTimer() {
ct = new CountTimer(output);
}
...
}
class CountTimer implements ActionListener {
private String text = "";
private HasText txtComp;
...
CountTimer(txtComp) {
...
this.txtComp = txtComp;
...
}
@Override
public void actionPerformed(ActionEvent e) {
...
txtComp.setText(text);
...
}
}
我相信第二种设计可以被认为是一种松散耦合,因为它没有使用setter
,而是通过构造函数传递引用,同时定义自己的HasText
接口(因为Swing似乎没有接口,而且我也没有找到具有setText()
方法的JtextComponent
和JLabel
的公共父类)。你同意吗
通过构造函数传递参数的一般态度是什么
# 1 楼答案
第二个示例将文本视图组件传递给实现} 的类,允许集中处理动作事件。在文本组件的特定情况下,^{} 提供对聚焦文本组件和
ActionListener
的类。相反,考虑一个扩展^{Document
侦听的底层JTextComponent
模型的访问。作为here和here所概述的具体示例,在整个EditorKit
层次结构中使用这种预定义的操作周期性操作,例如响应计时器时可能发生的情况,考虑让^ {CD1>}更新文本组件的^ {CD4}};监听视图将自动更新自身以作出响应。在这种情况下,侦听器的构造函数将收到对文本组件模型的引用