AnObservableCounter.java |
package lectures.mvc; import util.annotations.WebDocuments; //OBSERVABLE-OBSERVER PATTERN // This is a subpattern of MVC // A model is an observable. // A view is an observer. // Not all observables are models. // Not all observers are views. // An observable notifies registered observers about changes made by its write methods. // The notification is done by calling notification methods in the observers. // It provides an additional method to register observers. // Ideally, it also provides methods to unregister observers. // Identify the registration and notification code in this class. // Is there an unregistration methpd @WebDocuments({"Lectures/Mvc.pptx", "Lectures/Mvc.pdf", "Videos/Mvc.avi"}) public class AnObservableCounter extends ACounter implements ObservableCounter { int counter = 0; // List of registered observers -much like StringHistory except that it holds // Observers instead of strings. ObserverHistory observers = new AnObserverHistory(); public void add (int amount) { super.add(amount); notifyAllObservers(); } // Go to CounterObserver (F3) public void addObserver(CounterObserver observer) { observers.addElement(observer); // why call update here? Hint: an observer can be added after the model changes // and some object other than the observer can call this method for the observer observer.update(this); } // Can the notification code be put in another class? void notifyAllObservers() { for (int observerNum = 0; observerNum < observers.size(); observerNum++) { // Should/does the model know how each observable will react to the new state observers.elementAt(observerNum).update(this); } } }