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 }
观察者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 }
辅助的类:

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 }
测试结果

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 }
来源:https://www.cnblogs.com/huaxueyihao/p/8672680.html
