观察者模式: 第一对象间一种对多的依赖关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
被观察者:
能动态的增加,取消观察者。它一般是抽象类或者是实现类,仅仅完成座位被观察者必须实现的职责,管理观察者并通知观察者。
观察者: 观察者接收到消息后,即进行update,对接收到的信息进行处理。
具体观察者: 对消息进行处理
被观察者:
能动态的增加,取消观察者。它一般是抽象类或者是实现类,仅仅完成座位被观察者必须实现的职责,管理观察者并通知观察者。
观察者: 观察者接收到消息后,即进行update,对接收到的信息进行处理。
具体观察者: 对消息进行处理
具体被观察者: 定义自己的业务, 同时通知观察者
\
public interface Observable {
/**
* 增加观察者
*/
void adObserver(Observer observer);
void deleteObserver(Observer observer);
/**
* 发生改变时通知
* @param context
*/
public void notifyObservers(String context);
}
public interface NewspaperFactory {
public void createLastNewspaper();
}
public class NewspaperOffice implements Observable ,NewspaperFactory{
//观察者离列表——》报刊亭
private ArrayList<Observer> observerList = new ArrayList<Observer>();
public void adObserver(Observer observer) {
observerList.add(observer);
}
public void deleteObserver(Observer observer) {
observerList.remove(observer);
}
public void notifyObservers(String context) {
for(Observer o : observerList){
o.update(context);
}
}
@Override
public void createLastNewspaper() {
System.out.println("最新的报纸生产出来了");
//通知 报亭有新报纸
notifyObservers("新的报纸");
}
}
public interface Observer {
public void update(String context) ;
}
public class Newsstand implements Observer{
/**
* 报刊亭做自己的事情
*/
public void update(String context) {
System.out.println("最新报纸出来了,要上架卖");
}
}
public class Client {
public static void main(String[] args) {
NewspaperOffice ob = new NewspaperOffice();
Observer stand = new Newsstand();
ob.adObserver(stand);
ob.createLastNewspaper();
}
}