2016-02-20 2 views
0

Я работаю над реализацией шаблона Observable Design для кода, который был предоставлен для назначения. Мне не нужен весь ответ, но я хочу понять, чего не хватает. Я не буду копировать весь код, но соответствующие штуки, которые я написал до сих пор. Код - это простой графический интерфейс для банков, который позволяет нам сохранять счета сбережений и проверки в ArrayList. Мой первый шаг должен был вытащить, что из в новый объект AccountList и расширить Наблюдаемые как таковую:Наблюдаемый шаблон Реализация не вызывающий метод обновления

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

} 
} 

В настоящее время в фактическом сервере класс я следующее выкрикнул в начале:

AccountList accList = new AccountList(new ArrayList<AAccount>()); 
Observer accObserver = new AccountListObserver(accList); 

Тогда всякий раз, когда учетная запись добавляется я звоню accList.add (соотв)

Я не получаю свой вывод, но программа работает нормально. Какую часть (я) мне не хватает, чтобы сделать этот функционал. Как только я понимаю, чего не хватает или нужно переместить/изменить, я могу внести необходимые изменения для всех функций. Я просто очень смущен тем, что может отсутствовать, потому что это похоже на логическую конфигурацию.

+0

Заменить вызов 'hasChanged()' с помощью 'setChanged()' и попробовать. –

+0

Вау ... Я знал, что это было просто. Огромное спасибо. –

+0

Вы можете придать 'o'' '' 'AccountList'' в' update'. И оттуда вы можете получить объекты 'Account'. 'AccountList accList = (AccountList) o;' –

ответ

3

Заменить звонок на hasChanged() с помощью setChanged(). Это устанавливает измененный флаг в true и позволяет notifyObservers() метод уведомлять наблюдателей.

+0

Большое вам спасибо! Поэтому я предполагаю, что моя последняя путаница заключается в том, как ссылаться на атрибуты Account и AccountList (имя, баланс и т. Д.) В методе обновления, поскольку он фактически ссылается на объект Observable 'o'. Есть простой способ сделать это? –

Смежные вопросы