Observer Pattern




Observer Pattern = Publishers + Subscribers
The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are
notified and updated automatically


Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import java.util.Observable;
public class NewsPaperAgent extends Observable{
 private String paper;
 public void update(){
  if(hasChanged()){   
   notifyObservers(this);
   clearChanged();
  }
 }
 
 public void setPaper(String paper){
  this.paper = paper;
  setChanged();
  update();
 }
 
 public String getPaper(){  
  return paper;
 }
}
==========
import java.util.Observable;
import java.util.Observer;
public class Businessman implements Observer{
 Observable agent;
 public Businessman(Observable agent){
  this.agent = agent;
  this.agent.addObserver(this);
 }
 
 @Override
 public void update(Observable observable, Object arg) {
  if(observable instanceof NewsPaperAgent){
   NewsPaperAgent agent = (NewsPaperAgent) observable;
   System.out.println("Businessman copy: "+agent.getPaper());
  }
 }
}
==========
import java.util.Observable;
import java.util.Observer;
public class Farmer implements Observer{
 Observable observable;
 public Farmer(Observable observable){
  this.observable =  observable;
  this.observable.addObserver(this);
 }
 
 @Override
 public void update(Observable observable, Object arg) {
  if(observable instanceof NewsPaperAgent){
   NewsPaperAgent agent = (NewsPaperAgent) observable;
   System.out.println("Farmer copy: "+agent.getPaper());
  }
 }
}
==========
import java.util.Observable;
import java.util.Observer;
public class Student implements Observer{
 Observable observable;
 public Student(Observable observable){
  this.observable = observable;  
  this.observable.addObserver(this);
 }
 
 @Override
 public void update(Observable observable, Object arg) {
  if(observable instanceof NewsPaperAgent){
   NewsPaperAgent agent = (NewsPaperAgent) observable;
   System.out.println("student copy: "+agent.getPaper());
  }
 }
}
==========
public class ObserverFlight {
 public static void main(String[] bag){
  NewsPaperAgent agent = new NewsPaperAgent();
  Student student = new Student(agent);
  Businessman businessman = new Businessman(agent);
  Farmer farmer = new Farmer(agent);
  
  agent.setPaper("Times oF India");
  agent.setPaper("Hindustan Times");
 }
}