一.观察者模式:
1.报社的业务是出版报纸
2.向某报社订阅报纸,只要他们有新报纸出版,就会给你送来,只要你是他们的订阅者,你就会一直收到新报纸
3.当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来
4.只要报社还在运营,就会一直有人向他们订阅或取消订阅
出版者+订阅者=观察者模式
实例解析
首先观察者要继承父类 Observable,被观察者要实现接口 Observer 这样之后,当观察者调用setChange()和notifyObservers()的时候,
被观察者就会执行update()方法,在update()方法里进行相关的操作
观察者(报社)代码:
package com.hpg.demo.publisher;
import java.util.Observable;
/**
* 出版社
* @author huarizhong
*
*/
public class Publisher extends Observable{
private String mName;
private String mDate;
/**
* 发新报纸
* @param paperName
* @param paperDate
*/
public void setNewPaper(String paperName,String paperDate){
this.mName = paperName;
this.mDate = paperDate;
notifySubscribers();
}
/**
* 通知订阅者
*/
private void notifySubscribers(){
//调用这两个方法才可以通知被观察者,被观察者就可以在update()方法中进行操作了
setChanged();
notifyObservers();
}
public String getmName() {
return mName;
}
public String getmDate() {
return mDate;
}
}
被观察者(订阅用户)代码:
package com.hpg.demo.publisher;
import java.util.Observable;
import java.util.Observer;
public class Subscriber implements Observer{
//声明 观察者(报社)
private Observable mObservable;
public Subscriber(Observable observable) {
this.mObservable = observable;
//添加到被观察者(订阅用户)
mObservable.addObserver(this);
}
/**
* 被通知后进行操作
*/
@Override
public void update(Observable o, Object arg) {
if (o instanceof Publisher) {
Publisher publisher = (Publisher) o;
System.out.println("名称:"+publisher.getmName()+" 日期:"+publisher.getmDate());
}
}
}
具体实现代码:
package com.hpg.demo.publisher;
public class TestMain {
public static void main(String args[]){
//定义一个报社
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber(publisher);
publisher.setNewPaper("今日头条", "2015/2/13");
}
}
运行结果
名称:今日头条 日期:2015/2/13