再看观察者模式Observer
来源:互联网 发布:创世网络宣传片 编辑:程序博客网 时间:2024/05/17 02:29
什么是观察者模式?
定义:观察者模式,定义了对象之间的一对多的依赖关系,当被观察者发生改变时,所有依赖被观察者的对象,都会被通知,并且做出相应的
改变。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听
者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察
者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常
被用来实现事件处理系统。
下面的例子以博客网站发布博客为例,当一个用户发布博客时,所有关注这个博主的用户,都会收到这篇博客。
第二步:具体的观察者,实现ObserverModelInterface接口,这里我们定义2个实现类,这2个实现类,可以看做是2个观察者。
第三步:定义被观察者抽象类:ObserverModelSubject
第四步:被观察者的实现类:ObserverModelSubjectImpl
ok,这样一个简单的观察者模式的实现,就写好了,接下来,我们测试一下,看看效果:
定义:观察者模式,定义了对象之间的一对多的依赖关系,当被观察者发生改变时,所有依赖被观察者的对象,都会被通知,并且做出相应的
改变。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听
者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察
者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常
被用来实现事件处理系统。
下面的例子以博客网站发布博客为例,当一个用户发布博客时,所有关注这个博主的用户,都会收到这篇博客。
第一步:定义一个观察者接口:ObserverModelInterface
package com;/** * * @author yangcq * @description 观察者模式 -- 观察者接口 * */public interface ObserverModelInterface { public void update();}
第二步:具体的观察者,实现ObserverModelInterface接口,这里我们定义2个实现类,这2个实现类,可以看做是2个观察者。
package com;/** * * @author yangcq * @description 观察者模式 -- 观察者接口实现类 * */public class ObserverModelImpl_A implements ObserverModelInterface{ public void update() { System.out.println("A刷新了博客列表,看到了《J2EE规范》这篇文章"); } }
package com;/** * * @author yangcq * @description 观察者模式 -- 观察者接口实现类 * */public class ObserverModelImpl_B implements ObserverModelInterface{ public void update() { System.out.println("B刷新了博客列表,看到了《J2EE规范》这篇文章"); } }
第三步:定义被观察者抽象类:ObserverModelSubject
package com;import java.util.Vector;/** * * @author yangcq * @description 观察者模式 -- 被观察者抽象类 * */public abstract class ObserverModelSubject { // Vector是线程安全的,所以这里使用Vector,而不是List private Vector<ObserverModelInterface> omi = new Vector<ObserverModelInterface>(); // 添加观察者 public void addObserver(ObserverModelInterface omi){ this.omi.add(omi); } // 移除观察者 public void delObserver(ObserverModelInterface omi){ this.omi.remove(omi); } // 通知Vector中所有的观察者 protected void notifyAllObserver(){ for(ObserverModelInterface oberver:omi){ oberver.update(); } } // 抽象方法,由实现类来实现具体的细节 public abstract void doSomething();}
第四步:被观察者的实现类:ObserverModelSubjectImpl
package com;/** * * @author yangcq * @description 观察者模式 -- 观察者接口实现类 * */public class ObserverModelSubjectImpl extends ObserverModelSubject{ @Override public void doSomething() { System.out.println("yangcq发表了一篇博客,名字叫:《J2EE规范》"); this.notifyAllObserver(); }}
ok,这样一个简单的观察者模式的实现,就写好了,接下来,我们测试一下,看看效果:
package com;/** * * @author yangcq * @description 观察者模式 -- 测试类 * */public class ObserverModelDemo { // 观察者模式,一共有四个角色:观察者接口、观察者实现类、被观察者抽象类、被观察者实现类 // 1,观察者接口 ObserverModelInterface // 这个接口定义了一个方法 update(),当被观察者发生改变时,会调用观察者的update方法; // 2,观察者实现类 ObserverModelImpl_A 和 ObserverModelImpl_B // 如果观察者数量较多,就会有较多的实现类 // 3,被观察者抽象类 ObserverModelSubject // 这个类是关键,定义了三个方法普通方法和一个抽象方法 // 4,被观察者实现类 ObserverModelSubjectImpl // 这个实现类主要实现doSomething()方法的细节 public static void main(String[] args){ ObserverModelSubject oms = new ObserverModelSubjectImpl(); // 添加观察者列表 oms.addObserver(new ObserverModelImpl_A()); oms.addObserver(new ObserverModelImpl_B()); oms.doSomething(); /** * 控制台输出: * * yangcq发表了一篇博客,名字叫:《J2EE规范》 * A刷新了博客列表,看到了《J2EE规范》这篇文章 * B刷新了博客列表,看到了《J2EE规范》这篇文章 */ }}
0 0
- 再看观察者模式Observer
- Observer 模式 观察者模式
- Observer模式 观察者模式
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者模式(Observer Pattern)
- 观察者(Observer)模式
- Observer(观察者)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式-Observer
- 观察者(Observer)模式
- 观察者设计模式Observer
- 观察者模式(Observer Pattern)
- 观察者(Observer)模式
- 观察者模式(Observer Pattern)
- Observer 观察者模式
- 观察者模式(Observer Pattern)
- make: *** No rule to make target `configure'. Stop.
- 流加密,一次性密码本的原理,简介,事例以及攻击方式
- Intellij Idea环境下Spark源码阅读环境
- Medium 78题 Subsets
- JAVA面向对象问题的汇总
- 再看观察者模式Observer
- 庆祝国庆
- Leetcode 286. Walls and Gates
- 机器学习干货贴
- Easy 125题 Valid Palindrome
- HTTP Error 503. The service is unavailable
- gluProject vs gluUnProject
- Oracle DMP备份文件导入(impdp)导出(expdp)方法
- Nagios和商业开源网管软件SugarNMS的功能介绍和区别