import java.util.*;
interface Subject
{
public void addObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
interface Observer
{
public void update();
}
class ConcreteSubject implements Subject
{
private ArrayList<Observer> observers;
public ConcreteSubject()
{
observers = new ArrayList<Observer>();
}
public void addObserver(Observer o)
{
observers.add(o);
}
public void removeObserver(Observer o)
{
int i = observers.indexOf(o);
if (i >= 0)observers.remove(i);
}
public void notifyObservers()
{
for(Observer o:observers)o.update();
}
}
class ConcreteObserver implements Observer
{
private Subject subject;
private String name;
public ConcreteObserver(Subject subject,String name)
{
this.subject = subject;
this.name=name;
subject.addObserver(this);
}
public void update()
{
System.out.println(name+" action");
}
}
public class TestObserver {
public static void main(String[] args) {
Subject s=new ConcreteSubject();
Observer o1=new ConcreteObserver(s,"Observer1");
Observer o2=new ConcreteObserver(s,"Observer2");
//s.removeObserver(o1);
s.notifyObservers();
}
}
输出结果:
Observer1 action
Observer2 action