Home Education and learning Web hosting and design Small Business
Observer design Patterns design Patterns
Observer pattern is used if any change in a object needs to be notified to its dependent objects. In this pattern one or more than one objects are registered to watch the other object.
If the observed object changes its state then all its dependent objects are updated automatically.
Class diagram
Sample Code:




/** File name: Subject.java **/


package observerpattern;

public interface Subject {
      public void addObserver( Observer o );
      public void removeObserver( Observer o );    
      public void notifyObservers() ; 
}



/** File name: Observer.java **/

package observerpattern;

public interface Observer {
      public void update( Subject o );
}




/** File name: ConcreteObserver.java **/

package observerpattern;

public class ConcreteObserver implements Observer {

    public ConcreteObserver() {
      
    }

     public void update( Subject o ) {
         System.out.println("Subject CHANGED");
     }
}





/** File name: IntegerDataBag.java **/

package observerpattern;

import java.util.ArrayList;
import java.util.Iterator;

public class IntegerDataBag implements Subject {
    
      private ArrayList list = new ArrayList();
      private ArrayList observers = new ArrayList();

      public void add( Integer i ) {
            list.add( i );
            notifyObservers();
      }

      public Iterator iterator() {
            return list.iterator();
      }

      public Integer remove( int index ) {
            if( index < list.size() ) {
                  Integer i = (Integer) list.remove( index );
                  notifyObservers();
                  return i;
            }
            return null;
      }

      public void addObserver( Observer o ) {
            observers.add( o );
      }

      public void removeObserver( Observer o ) {
            observers.remove( o );
      }

      private void notifyObservers() {
            // loop through and notify each observer
            Iterator i = observers.iterator();
            while( i.hasNext() ) {
                  Observer o = ( Observer ) i.next();
                  o.update( this );
            }
      }

}




/** File name: Main.java **/

package observerpattern;

public class Main implements Observer {
    

    public Main() {
        IntegerDataBag i = new IntegerDataBag();
        Observer concreteObserver = new ConcreteObserver();
        i.addObserver(concreteObserver);
        
        System.out.println("\nAdding 3");
        i.add(new Integer(3)) ;
        System.out.println("\nAdding 4");
        i.add(new Integer(4)) ;
        System.out.println("\nAdding 4");
        i.add(new Integer(5)) ;
        
    }
    
     public void update( Subject o ) {
         System.out.println("Subject CHANGED");
     }
  
     public static void main(String[] args) {
         new Main() ;
     }
    
}



Following output is generated:

Adding 3 Subject CHANGED Adding 4 Subject CHANGED Adding 4 Subject CHANGED

teacherone provides material for training only. We do not warrant the correctness of its contents. The risk from using it lies entirely with the user. teacherone is not liable for any damage or loss.