首先,我將呈現一定程度緊密耦合類的快速輪廓(雖然不是最糟糕的情況下):傳遞參數通過構造
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
它通過構造,並在SAM傳遞一個參考e時間定義了它自己的HasText
接口(因爲Swing似乎沒有一個接口,我沒有找到具有setText()
方法的JtextComponent
和JLabel
的共同父項)。你會同意嗎?
通過構造函數傳遞參數的一般態度是什麼?
我的第二個類實現了Swing Timer的ActionListener(不是文本字段)。 JTextField只是作爲一個可以容納文本的組件(它的*可編輯性*在這裏是errlelevant)。可能是'JLabel'。 –
機制相同:讓計時器的偵聽器更新_view_組件的_model_,並且偵聽的_view_將自動更新以作爲響應。 – trashgod