Java设计模式:观察者-阿里云开发者社区

开发者社区> ali清英> 正文

Java设计模式:观察者

简介:
+关注继续查看

原文链接 译者:秦建平

简单来说,观察者模式=发布者+订阅者。

下面是一个有关猎头的典型的例子。在下面这张图当中有两个角色:猎头和寻找工作的人。找工作的人向猎头订阅,告知自己希望得到一份工作,当有新的工作机会的时候,猎头就会把这个信息通知给曾经向他订阅过的人。

observer-pattern

Java代码
Subject接口:


1 public interface Subject {
2     public void registerObserver(Observer observer);
3     public void removeObserver(Observer observer);
4     public void notifyAllObservers();
5 }

Observer接口:


1 public interface Observer {
2     public void update(Subject subject);
3 }

HeadCounter实现了Subject接口,实际上就是发布者:


01 public class HeadCounter implements Subject {
02  
03     private List<Observer> observerList;
04     private List<String> jobList;
05  
06     public HeadCounter(){
07         observerList = new ArrayList<Observer>();
08         jobList = new ArrayList<String>();
09     }
10  
11     @Override
12     public void registerObserver(final Observer observer) {
13         if(! observerList.contains(observer)){
14             observerList.add(observer);
15         }
16     }
17  
18     @Override
19     public void removeObserver(final Observer observer) {
20         if(observerList.contains(observer)){
21             observerList.remove(observer);
22         }
23     }
24  
25     @Override
26     public void notifyAllObservers() {
27         for(Observer observer : observerList){
28             observer.update(this);
29         }
30     }
31  
32     public void addJob(final String job){
33         this.jobList.add(job);
34         notifyAllObservers();
35     }
36  
37     public List<String> getJobs(){
38         return jobList;
39     }
40  
41     public String toString(){
42         return jobList.toString();
43     }

JobSeeker实现了Observer接口,实际上就是订阅者:


01 public class JobSeeker implements Observer {
02     private String name;
03  
04     public JobSeeker(String name){
05         this.name = name;
06     }
07  
08     @Override
09     public void update(Subject subject) {
10         System.out.println(this.name + " got notified!");
11         System.out.println(subject);
12     }
13 }

程序实例入口:


01 public class Main {
02     public static void main(String[] args) {
03         HeadCounter headCounter = new HeadCounter();
04                 //注册订阅者
05         headCounter.registerObserver(new JobSeeker("Mike"));
06         headCounter.registerObserver(new JobSeeker("Chris"));
07         headCounter.registerObserver(new JobSeeker("Jeff"));
08         //通知所有订阅者有新的工作机会
09         headCounter.addJob("Google Job");
10         headCounter.addJob("Yahoo Job");
11     }
12 }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
设计模式中的观察者模式
设计模式中的观察者模式
5 0
JAVA 设计模式 访问者模式
用途 访问者模式 (Visitor) 表示一个作用于某对象结构中的各元素的操作。 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式是一种行为型模式。
752 0
JAVA 设计模式 备忘录模式
用途   备忘录模式 (Memento) 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。 备忘录模式是一种行为型模式。
594 0
IOS设计模式第七篇之观察者设计模式
版权声明:原创作品,谢绝转载!否则将追究法律责任。 观察者设计模式 在观察者设计模式里面,一个对象通知其他的对象一些状态的改变。涉及这些对象不需要知道另一个对象---因此鼓励解耦设计模式。这个设计模式经常被用来通知感兴趣的对象当一个属性被改变时候。
740 0
带你读《Java程序设计与计算思维》之一:计算思维与Java设计初步体验
程序设计的过程就是一种计算思维的表现,《Java程序设计与计算思维》结合Java程序设计语言的教学特点,遵循计算思维的方式,图解重要概念,通过大量的范例程序讲解和上机编程实践来指导读者活用Java程序语法,兼顾培养计算思维和学习面向对象程序设计的双目标。
875 0
JAVA内置的观察者模式样本
DisplayElement.java public interface DisplayElement { public void display(); } CurrentConditionsDisplay.
544 0
设计模式之观察者模式
写作方法:    一般用于异步通讯1. 定义ObServer类   定义允许调用的虚函数,保护其他函数使不可见。
588 0
+关注
ali清英
方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
614
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载