设计模式之观察者模式

Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

Subject(被观察者)

  被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的对类列表。

ConcreteSubject

  被观察者的具体实现,包含一些基本的属性状态及其他操作。

Observer(观察者)

  接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。

ConcreteObserver

  观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。

被观察者Subject

 1 package com.Design.Observer1;
 2 
 3 import java.util.Observable;
 4 
 5 public class BlogUser extends Observable {
 6     
 7     public void pubishBlog(String articleTitle,String articleContent){
 8         Article art = new Article();
 9         art.setArticleTitle(articleTitle);
10         art.setArticleContent(articleContent);
11         System.out.println("博主:发表新文章,文章标题"+articleTitle+",文章内容:"+articleContent);
12         
13         this.setChanged();
14         this.notifyObservers(art);
15     }
16     
17     
18     
19     
20 }
View Code

观察者Observer:

 1 package com.Design.Observer1;
 2 
 3 import java.util.Observable;
 4 import java.util.Observer;
 5 
 6 public class MyObserver implements Observer {
 7 
 8     @Override
 9     public void update(Observable o, Object arg) {
10         
11         Article art = (Article) arg;
12         
13         
14         System.out.println("博主发表了新的文章,快去看吧");
15         System.out.println("标题:"+art.getArticleTitle()+";内容:"+art.getArticleContent());
16     }
17     
18 }
View Code

辅助的类:

 1 package com.Design.Observer1;
 2 
 3 public class Article {
 4     
 5     private String articleTitle;
 6     
 7     private String articleContent;
 8 
 9     public String getArticleTitle() {
10         return articleTitle;
11     }
12 
13     public void setArticleTitle(String articleTitle) {
14         this.articleTitle = articleTitle;
15     }
16 
17     public String getArticleContent() {
18         return articleContent;
19     }
20 
21     public void setArticleContent(String articleContent) {
22         this.articleContent = articleContent;
23     }
24     
25     
26 }
View Code

测试结果

 1 package com.Design.Observer1;
 2 
 3 public class MainClass {
 4     
 5     public static void main(String[] args) {
 6         
 7         BlogUser blogUser = new BlogUser();
 8         blogUser.addObserver(new MyObserver());
 9         blogUser.pubishBlog("博主:发表新文章,快来看吧", "balabala");
10         
11     }
12     
13 }
View Code

 

posted @ 2018-03-29 21:48  花雪依蒿  阅读(109)  评论(0编辑  收藏  举报