Presentation is loading. Please wait.

Presentation is loading. Please wait.

Observer Design Pattern Source: Design Patterns – Elements of Reusable Object- Oriented Software; Gamma, et. al.

Similar presentations


Presentation on theme: "Observer Design Pattern Source: Design Patterns – Elements of Reusable Object- Oriented Software; Gamma, et. al."— Presentation transcript:

1 Observer Design Pattern Source: Design Patterns – Elements of Reusable Object- Oriented Software; Gamma, et. al.

2 Problem An object (Observer) needs to be notified whenever another object (Subject) changes state so it can: –Keep its own state in synch with the Subject – or –Perform some action in response to changes in the Subject Example: Synchronizing data in Inventory Tracker GUI

3 Solution

4

5 Consequences Can flexibly add and remove observers to an object Subject is not tightly coupled to Observer –This is an example of dependency inversion Supports broadcast communication Changing the state of an object can be far more expensive than you expect

6 Known Uses: Synchronizing data with graphical views Example: Temperature Editor

7 Known Uses: Session listeners A Session object stores information about the current user session –What user is logged in and what their privileges are –Time at which the session started –History URL history in web browser Command history for undo/redo Other parts of the application might need to be notified when the Session state changes –User logged in –User logged out

8 Known Uses: Java Observers Support for the Observer pattern is built into Java interface Observer { void update(Observable o, Object arg); } class Observable { void addObserver(Observer o) { … } void deleteObserver(Observer o) { … } void notifyObservers(Object arg) { … } }

9 Java Observer import java.util.Observable; import java.util.Observer; public class Screen implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("Changed to: " + ((DataStore)(o)).getData()); }

10 Java Observable import java.util.Observable; public class DataStore extends Observable { private String data; public String getData() { return data; } public void setData(String data) { this.data =data; //mark the observable as changed setChanged(); //send a notification notifyObservers(); }

11 Java Observer Pattern public class ObserverPattern { /** * @param args */ public static void main(String[] args) { Screen screen = new Screen(); DataStore dataStore = new DataStore(); //register observer dataStore.addObserver(screen); dataStore.setData("Hello World"); }


Download ppt "Observer Design Pattern Source: Design Patterns – Elements of Reusable Object- Oriented Software; Gamma, et. al."

Similar presentations


Ads by Google