Java 通过构造函数传递参数
首先,我将简要介绍一些紧密耦合的类(虽然不是最坏的情况): 我的问题是关于第二个片段(与第一个片段相比,并就其本身): 我认为第二种设计可以被视为松散耦合,因为它不使用Java 通过构造函数传递参数,java,swing,decoupling,loose-coupling,Java,Swing,Decoupling,Loose Coupling,首先,我将简要介绍一些紧密耦合的类(虽然不是最坏的情况): 我的问题是关于第二个片段(与第一个片段相比,并就其本身): 我认为第二种设计可以被视为松散耦合,因为它不使用setter而是通过构造函数传递引用,同时定义自己的HasText接口(因为Swing似乎没有一个,而且我没有找到具有setText()方法的JtextComponent和JLabel的公共父级)。您同意吗 通过构造函数传递参数的一般态度是什么?< p>您的第二个示例将文本视图组件传递到实现 ActuistListabue/Cul
setter
而是通过构造函数传递引用,同时定义自己的HasText
接口(因为Swing似乎没有一个,而且我没有找到具有setText()
方法的JtextComponent
和JLabel
的公共父级)。您同意吗
通过构造函数传递参数的一般态度是什么?
< p>您的第二个示例将文本视图组件传递到实现<代码> ActuistListabue/Cult>的类。cused text component和底层文档模型,JTextComponent
将侦听它们。作为具体示例,在整个EditorKit
层次结构中使用了这些预定义操作
周期性动作,例如响应计时器时可能发生的情况,考虑让<代码> ActuistListor < /C> >更新文本组件<代码>文档>代码>;监听视图将自动更新自己。在这种情况下,监听器的构造函数将接收到对文本组件模型的引用。
我的第二类为Swing计时器实现ActionListener(不是文本字段)。JTextField仅用作可保存文本的组件(此处的可编辑性为errleEvat)。可能是一个JLabel
。机制是相同的:让计时器的侦听器更新视图组件的模型,侦听视图将自动更新自身以响应。
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);
...
}
}