假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。
public class Cat extends MySubject
{
public void cry()
{
System.out.println("猫叫!");
System.out.println("----------------------------");
for(Object obs:observers)
{
((MyObserver)obs).response();
}
}
}
public class Client
{
public static void main(String a[])
{
MySubject subject=new Cat();
MyObserver obs1,obs2,obs3;
obs1=new Mouse();
obs2=new Mouse();
obs3=new Dog();
subject.attach(obs1);
subject.attach(obs2);
subject.attach(obs3);
MyObserver obs4;
obs4=new Pig();
subject.attach(obs4);
subject.cry();
}
}
public class Dog implements MyObserver
{
public void response()
{
System.out.println("狗跟着叫!");
}
}
public class Mouse implements MyObserver
{
public void response()
{
System.out.println("老鼠努力逃跑!");
}
}
public interface MyObserver
{
void response(); //抽象响应方法
}
import java.util.*;
public abstract class MySubject
{
protected ArrayList observers = new ArrayList();
//注册方法
public void attach(MyObserver observer)
{
observers.add(observer);
}
//注销方法
public void detach(MyObserver observer)
{
observers.remove(observer);
}
public abstract void cry(); //抽象通知方法
}
public class Pig implements MyObserver
{
public void response()
{
System.out.println("猪没有反应!");
}
}