Skip to main content

Observer Pattern : Real Life Example and Java Code Example

Observer Pattern

The observer pattern defines a one to many relation between objects so that when one object changes state, all of its dependent or related objects get notified automatically


Real Life Example:

Group Chat is a real life example of observer pattern. Whenever someone type some text in text button and hit send button. Every member get notified that someone texted in group.


Java Code Example:

public interface Subject {
 void register(Observer observer);
 void remove(Observer observer);
 void notifyRespectedObserver(String msg);
}

public interface Observer {
 void update(String msg);
 String write(String msg);
 String getName();
}


public class Console implements Subject {
 public List memberList;
 
 public Console(){
  memberList = new LinkedList();
 }
 
 public void register(Observer observer){
  memberList.add(observer);
  }
 
 public void remove(Observer observer){
  memberList.remove(observer);
 }
 
 public void notifyRespectedObserver(String msg){
  for(Observer observer:memberList){
   observer.update(observer.getName()+": $"+msg);
  }
 }
}



public class GroupMember implements Observer{
 private String name;

 public GroupMember(String name){
  this.name = name;
 }
 
 
 @Override
 public void update(String msg){
  System.out.println(msg);
 }
 
 public String write(String msg){
  return this.name+"@ "+msg;
 }
 //Getters and Setters
 public String getName() {
  return name;
 }
 
 
 public void setName(String name) {
  this.name = name;
 }
}



public class ChatGroup {
 
 public static void main(String... args){
  
  Console console = new Console();
  
  Observer ram = new GroupMember("Ram");
  Observer shyam = new GroupMember("Shyam");
  Observer rohan = new GroupMember("Rohan");
  Observer sohan = new GroupMember("Sohan");
  
  console.register(ram);
  console.register(shyam);
  console.register(rohan);
  console.register(sohan);
  
  //Some one write in text box
  String text = rohan.write("Hi friends how r u!");
  console.notifyRespectedObserver(text);
  
 }
}


Comments