例子:以订阅博客发布为例子
package ObverserBlog;
/**
* 封装的文章对象
* <p>Title: Article</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午3:36:07
* @version 1.0
*/
public class Article {
private String articleTitle;
private String articleContent;
public String getArticleTitle() {
return articleTitle;
}
public void setArticleTitle(String articleTitle) {
this.articleTitle = articleTitle;
}
public String getArticleContent() {
return articleContent;
}
public void setArticleContent(String articleContent) {
this.articleContent = articleContent;
}
}
package ObverserBlog;
import java.util.Observable;
/**
* 被监听的用户对象的行为
* <p>Title: BlogUser</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午3:37:01
* @version 1.0
*/
public class BlogUser extends Observable{
public void publishBlog(String articleTitle,String articleContent){
Article art = new Article();
art.setArticleTitle(articleTitle);
art.setArticleContent(articleContent);
System.out.println("博主:发表新文章,文章标题:" + articleTitle + ",文章内容:" + articleContent);
this.setChanged();
//传递对象给观察者
this.notifyObservers(art);
}
}
package ObverserBlog;
import java.util.Observable;
import java.util.Observer;
/**
* 观察者1
* 自定义的观察者类
* <p>Title: MyObserve</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午3:57:32
* @version 1.0
*/
public class MyObserver1 implements Observer {
/**
* 当被观察发生变化时的响应
* <p>Title: update</p>
* <p>Description: </p>
* @param o
* @param arg
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
@Override
public void update(Observable o, Object object) {
//获得被观察者传递过来的对象参数
Article article = (Article)object;
System.out.println("观察者1收到的消息:........");
System.out.println("博主发表了新的文章,快去看吧!");
System.out.println("博客标题为:" + article.getArticleTitle());
System.out.println("博客内容为:" + article.getArticleContent());
}
}
package ObverserBlog;
import java.util.Observable;
import java.util.Observer;
/**
* 观察者2
* 自定义的观察者类
* <p>Title: MyObserve</p>
* <p>Description: </p>
* <p>Company:</p>
* @author 夏 杰
* @date 2016年1月4日下午3:57:32
* @version 1.0
*/
public class MyObserver2 implements Observer {
/**
* 当被观察发生变化时的响应
* <p>Title: update</p>
* <p>Description: </p>
* @param o
* @param arg
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
@Override
public void update(Observable o, Object object) {
//获得被观察者传递过来的对象参数
Article article = (Article)object;
System.out.println("观察者2收到的消息:........");
System.out.println("博主发表了新的文章,快去看吧!");
System.out.println("博客标题为:" + article.getArticleTitle());
System.out.println("博客内容为:" + article.getArticleContent());
}
}
package ObverserBlog;
public class MainClass {
public static void main(String[] args) {
BlogUser user = new BlogUser();
//添加观察者1
user.addObserver(new MyObserver1());
//添加观察者2
user.addObserver(new MyObserver2());
//发布blog
user.publishBlog("哈哈,博客上线了", "大家多来访问");
}
}