概述:观察者模式相当于一对多的依赖,就是当一个对象改变时,会通知它所关联的类
在这里,我们把被观察者用接口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();