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

How to Create a Namespace in Aerospike Database

                      T his post is about creating a namespace in Aerospike. I could not find any concrete method to create a namespace like create database in MySQL and MongoDB. So I am suggesting a way to create a namespace in Aerospike Database. Step-1: Locate config file aerospike.conf and open it in your favorite editor and make sure you have permission to modify the file. In my system the path of file /etc/aerospike/aerospike.conf (Default in Ubuntu). Here the content of the file. # Aerospike database configuration file. service { user root group root paxos-single-replica-limit 1 # Number of nodes where the replica pidfile /var/run/aerospike/asd.pid service-threads 4 transaction-queues 4 transaction-threads-per-queue 4 proto-fd-max 15000 } logging { # Log file must be an absolute path. file /var/log/aerospike/aerospike.log { context any info } } network { service { address any port 3000 } heartbeat { mode multicast address 239.1.99.222 p

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

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