概述:观察者模式相当于一对多的依赖,就是当一个对象改变时,会通知它所关联的类
在这里,我们把被观察者用接口Subject定义,把观察者用接口Observer定义
/**
* 被监视的需要实现这个接口,用于添加,删除,通知观察者
* @author zhou
*
*/
public interface Subject {
public void addObser(Obsered obsered);
public void deletObser(Obsered obsered);
public void notifiObser(String context);
}
/**
* 观察者实现这个接口,接收消息
* @author zhou
*
*/
public interface Observer {
public void ubdate(String str);
}
//被观察者
public class ConcreteSubject implements Preson,Subject{
public List<Observer> list = new ArrayList<Observer>();
@Override
public void addObser(Observer obsered) {
// TODO Auto-generated method stub
list.add(obsered);//添加观察者
}
@Override
public void deletObser(Observer obsered) {
// TODO Auto-generated method stub
list.remove(obsered);//移除观察者
}
@Override
public void notifiObser(String str) {
// TODO Auto-generated method stub
for(Observer obsered:list){
obsered.ubdate(str);//通知观察者消息
}
}
@Override
public void eat() {
// TODO Auto-generated method stub
this.notifiObser("这货在吃饭");
}
@Override
public void haveFun() {
// TODO Auto-generated method stub
this.notifiObser("这货在玩耍");
}
}
/**
* 观察者
* @author zhou
*
*/
public class ConcreteObserver implements Observer {
@Override
public void ubdate(String str) {
// TODO Auto-generated method stub
System.out.println("韩非子在吃饭");
//在这里我已经得到消息
happy();
}
public void happy() {
// TODO Auto-generated method stub
System.out.println("这货很快乐");
}
}
//添加观察者
ConcreteSubject concreteSubject = new ConcreteSubject();
Observer lisi = new ConcreteObserver();
concreteSubject.addObser(liusi);
concreteSubject.haveFun();
github地址为: https://github.com/zhouwei5200/observer