/** 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