Observer pattern
Observer pattern에 대해 설명하는 페이지입니다.
Observer pattern
Tags
Design Pattern, Java
1. Introduction
- a.k.a
- Publish/Subscibe model
- Purpose
- Lets one or more objects be notified of state changes in other objects within the system
- Use When
- Loose coupling is needed for communications
- State changes in one or more objects should trigger behavior in other objects
- Broadcasting capabilities are required.
- An understanding exists that objects will be blind to the expense of notification
- Definition
- It defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
2. How to Use
-
Observable (Publisher) side
- To send notifications
- Call SetChanged()
- Call either notifyObservers() or notifyObservers(Object arg)
java1import java.util.Observable; 2import java.util.Observer; 3 4public class MyData extends Observable { 5 private int number; 6 7 public MyData() {} 8 9 public void measurementsChanged() { 10 setChanged(); 11 notifyObservers(); 12 } 13 14 public void setMeasurements(int number) { 15 this.number = number; 16 measurementsChanged(); 17 } 18 19 public int getNumber() { 20 return number; 21 } 22} - To send notifications
-
Observer (Subsciber) side
- To become an observer
- Implement java.util.Observer interface
- To subscribe
- Call addObserver() on any Observable object
- To unsubscribe
- Call deleteObserver()
- To get updated
- Implement update(Observable o, Object arg)
java1import java.util.Observable; 2import java.util.Observer; 3 4public class MyObserver implements Observer { 5 Observable observable; 6 private int number; 7 8 public MyObserver(Observable observable) { 9 this.observable = observable; 10 observable.addObserver(this); 11 } 12 13 public void update(Observable obs, Object arg) { 14 if (obs instanceof MyData) { 15 MyData myData = (MyData) obs; 16 this.number = myData.getNumber(); 17 18 // Something to execute 19 } 20 } 21} - To become an observer
