开发者社区> 长征6号> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

设计模式总结篇系列:观察者模式(Observer)

简介:
+关注继续查看

观察者模式中通常有两个基本的概念主题:观察者和被观察者。当被观察者状态发生改变时,需要通知相应的观察者,当然,每个被观察者所对应的观察者可能不知一个,他们之间是1:n的关系。用专业一点的术语对观察者模式的描述为:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化。

观察者模式的一般实现方式如下:

1.定义观察者所具有的共同的接口:

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

2.定义两个观察者:

复制代码
1 class ObserverA implements Observer {
2 
3     @Override
4     public void update() {
5         System.out.println("ObserverA has received!");
6     }
7 }
复制代码
复制代码
1 class ObserverB implements Observer {
2 
3     @Override
4     public void update() {
5         System.out.println("ObserverB has received!");
6     }
7 }
复制代码

3.定义被观察者所具有的抽象父类:

复制代码
 1 abstract class Observable {
 2 
 3     private Vector<Observer> vector = new Vector<Observer>();
 4 
 5     public void add(Observer observer) {
 6         vector.add(observer);
 7     }
 8 
 9     public void del(Observer observer) {
10         vector.remove(observer);
11     }
12 
13     public void notifyObservers() {
14         Enumeration<Observer> enumo = vector.elements();
15         while (enumo.hasMoreElements()) {
16             enumo.nextElement().update();
17         }
18     }
19 
20     public void operation() {
21 
22     }
23 }
复制代码

4.定义具体的被观察者:

复制代码
class ConcretObservable extends Observable{
    
    @Override  
    public void operation() {  
        System.out.println("update self!");  
        notifyObservers();  
    }
    
}
复制代码

5.测试:

复制代码
 1 public class ObserverTest {  
 2       
 3     public static void main(String[] args) {  
 4         Observable sub = new ConcretObservable();  
 5         sub.add(new ObserverA());  
 6         sub.add(new ObserverB());  
 7           
 8         sub.operation();  
 9     }  
10   
11 }  
复制代码

 

---------------------------------------------------------------------------------
笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢!
分类: 设计模式

本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3784932.html,如需转载请自行联系原作者

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

相关文章
人人都会设计模式:06-观察者模式--Observer
本文是设计模式的第六篇,带大家一起掌握观察者模式并结合 Android 源码逐步分析,读完本文你会发现,原来观察者模式你早使用了无数次了。废话不多说,我们开始今天之旅吧
1382 0
设计模式之观察者模式(Observable与Observer)
好久没有写博客啦,之前看完了《设计模式之禅》也没有总结一下,现在回忆一下设计模式之观察者模式。 1.什么是观察者模式   简单情形:有A、B、C、D等四个独立的对象,其中B、C、D这三个对象想在A对象发生改变的第一时间知道这种改变,以便做出相应的响应或者对策。
1157 0
[转]设计模式-Observer
设计模式-Observer 1. 解决的问题:    假如现在要编写一个天气预报的公布栏, 公布栏有两种显示方式, 一种是图像方式显示, 一种是表格形式显示. 2. 问题分析:    应该根据数据与现实分离的原则将天气预报数据和现实形式分别封装起来,    今后可能增加其他的显示形式;    天气预报数据发生变化后,需要对所有的显示形式进行更新.
844 0
observer 观察者模式
引用:http://baike.baidu.com/view/416448.htm 观察者模式的定义  观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
569 0
23种设计模式之观察者模式(Observer)
23种设计模式之观察者模式(Observer) 观察者模式又称为发布—订阅模式、模型—视图模式、源-监听器模式或从属者(dependents)模式,是一种对象的行为型模式。
676 0
+关注
1222
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载