我正在努力在为作业提供的代码上实现Observable Design模式。我不想要整个答案,但我确实想了解遗漏的内容。我不会复制所有的代码,但是到目前为止我写的相关部分。代码是一个简单的银行GUI,允许我们将存储和检查帐户保存到ArrayList。我的第一步是将其拉出到一个新的对象AccountList中并扩展Observable:
public class AccountList extends Observable {
public List<AAccount> accountList;
public AccountList(List<AAccount> accountList) {
this.accountList = accountList;
}
public void add(AAccount acc) {
accountList.add(acc);
hasChanged();
notifyObservers();
}
}
我的下一步是实现一个观察者类:
public class AccountListObserver implements Observer{
public AccountListObserver(Observable o) {
o.addObserver(this);
}
@Override
public void update(Observable o, Object arg) {
System.out.println("Account " + o + " has been added, " +
"there are now " + o + " accounts on the server.");
}
}
现在在实际的Server类中,我在开头调用了以下内容:
AccountList accList = new AccountList(new ArrayList<AAccount>());
Observer accObserver = new AccountListObserver(accList);
然后,无论何时添加帐户,我都会调用accList.add(acc)
我没有得到我的输出,但程序运行正常。为了实现这一功能,我错过了哪些内容。一旦我理解了缺少或需要移动/更改的内容,我就可以对所有功能进行必要的更改。我对可能遗漏的内容感到非常困惑,因为它似乎是一种逻辑配置。
答案 0 :(得分:4)
将hasChanged()
的来电替换为setChanged()
。这会将更改的标志设置为true,并允许notifyObservers()
方法通知观察者。