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

Popular posts from this blog

com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server

If you are trying to connect Mongo DB Server and it insanely throwing following error. com.mongodb.MongoTimeoutException : Timed out after 1000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=192.168.1.10:27010, type=UNKNOWN, state=CONNECTING, exception={ com.mongodb.MongoSecurityException: Exception authenticating MongoCredential {mechanism=null, userName='user123', source='admin', password=<hidden>, mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException: Command failed with error 18 : 'Authentication failed.' on server 192.168.1.10:27010 . The full response is { "ok" : 0.0, "code" : 18, "errmsg" : "Authentication failed." }}}] If you start looking the error content First you encounter with Timeout Exception which may mislead you. It is basically an authentication error. I...

Easiest Method to Read and Write into Files Streams in Competitive Programming

                      T his article is about easiest way to perform read and write operation from file. File handling is one of the most important aspect of programming and it becomes more important when we do competitive programming. Here are some context when you need to deal with files in comptetive programming. 1) Some specific programming contests like Google Code Jam and Facebook Hacker Cup they provide a file for input. You have to read input from that file and write answers into a file and upload on server within limited time. 2) If you are trying to code for a problem. Suppose the problem was that a square matrix is given and you have to rotate the matrix by 90 degree clock-wise. First line of input indicate the total no. of test cases and first line before matrix represents size of matrix. Then input would be like this. 3 5 10 23 43 34 21 11 13 43 30 71 10 23 43 ...

java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager

If you are trying to get started with Janus Graph with Apache Cassandra. You may get the following error. Caused by: org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:219) ~[janusgraph-cassandra-0.2.0.jar:na] at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:198) ~[janusgraph-cassandra-0.2.0.jar:na] ... 48 common frames omitted Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused) at org.apache.thrift.transport.TSocket.open(TSocket.java:187) ~[libthrift-0.9.2.jar:0.9.2] at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81) ~[libthrift-0.9.2.jar:0.9.2] at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeR...