设计模式--观察者模式

来源:互联网 发布:sql server decimal 编辑:程序博客网 时间:2024/06/04 00:12





例子:以订阅博客发布为例子

package ObverserBlog;/** * 封装的文章对象 * <p>Title: Article</p> * <p>Description: </p> * <p>Company:</p>  * @author夏 杰 * @date2016年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夏 杰 * @date2016年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夏 杰 * @date2016年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) */@Overridepublic 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夏 杰 * @date2016年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) */@Overridepublic 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();//添加观察者1user.addObserver(new MyObserver1());//添加观察者2user.addObserver(new MyObserver2());//发布bloguser.publishBlog("哈哈,博客上线了", "大家多来访问");}}








0 0