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);
        ...
    }
}