一、什么是观察者模式
Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
二、观察者模式的结构
三、观察者模式的角色和职责
Subject(被观察者) 被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
ConcreteSubject 被观察者的具体实现。包含一些基本的属性状态及其他操作。
Observer(观察者) 接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。
ConcreteObserver 观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。
四、观察者模式的典型应用
Observer模式的典型应用
- 侦听事件驱动程序设计中的外部事件
- 侦听/监视某个对象的状态变化
- 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者
代码:
Article .java
//被观察者的具体实现
public class Article {
private String articleTitle;
private String articleCount;
public String getArticleTitle() {
return articleTitle;
}
public void setArticleTitle(String articleTitle) {
this.articleTitle = articleTitle;
}
public String getArticleCount() {
return articleCount;
}
public void setArticleCount(String articleCount) {
this.articleCount = articleCount;
}
}
BoZhu.java
import java.util.Observable;
//被观察者
public class BoZhu extends Observable{
public void sun(String articleTitle,String articleCount){
Article art = new Article();
art.setArticleTitle(articleTitle);
art.setArticleCount(articleCount);
System.out.println("博客发表了文章,标题:"+articleTitle+" 内容:"+articleCount);
this.setChanged();
this.notifyObservers(art);
}
}
MyObservlet .java
//观察者的具体实现
import java.util.Observable;
import java.util.Observer;
public class MyObservlet implements Observer {
@Override
public void update(Observable o, Object arg) {
Article m = (Article)arg;
System.out.println("博主发表新文章了");
System.out.println("新文章标题:"+m.getArticleTitle());
System.out.println("新文章内容:"+m.getArticleCount());
}
}
MainClass .java
public class MainClass {
//测试类
public static void main(String[] args) {
BoZhu b = new BoZhu();
b.addObserver(new MyObservlet());
b.sun("北京我来了", " 在外面有很多的困难地方");
//博客发表了文章,标题:北京我来了 内容: 在外面有很多的困难地方
//博主发表新文章了
//新文章标题:北京我来了
//新文章内容: 在外面有很多的困难地方
}
}