观察者模式:定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所以依赖于他的对象都得到通知并更新。
角色分析:
抽象目标角色(Subject):
目标角色提供观察者注册、删除接口,并发出通知。
抽象观察者角色(IObserver):
当目标角色发生改变时,获得通知的对象的一个更新接口。
实现:
package observer; /** *create by datao.wang 2014-2-8-下午2:45:04 *目标对象 */ public interface ISubject { public abstract void notifyObserver(); } package observer; import java.util.ArrayList; import java.util.List; /** *create by datao.wang 2014-2-8-下午2:50:48 */ public class Subject implements ISubject { List<IObserver> list=new ArrayList<IObserver>(); @Override public void notifyObserver() { for(IObserver ob:list){ ob.update(); } } public void addObserver(IObserver o){ list.add(o); } public void dosomething(){ System.out.println("我要跟新了"); //通知更新 notifyObserver(); } } package observer; /** *create by datao.wang 2014-2-8-下午2:41:04 *抽象观察者 */ public interface IObserver { public void update(); } package observer; /** *create by datao.wang 2014-2-8-下午2:42:33 *观察者1号 */ public class Observer1 implements IObserver { @Override public void update() { System.out.println("发生改变...."); } } package observer; /** *create by datao.wang 2014-2-8-下午2:42:59 *观察者2号 */ public class Observer2 implements IObserver { @Override public void update() { System.out.println("发生改变....."); } } package observer; /** *create by datao.wang 2014-2-8-下午2:58:00 *客户端调用 */ public class Client { public static void main(String[] args) { Subject subject=new Subject(); Observer1 s1=new Observer1(); Observer2 s2=new Observer2(); subject.addObserver(s1); subject.addObserver(s2); subject.dosomething(); } }
应用场景:
1、当一个对象的改变必须通知其他对象的时候,可采用观察者模式。
优点:
1、实现目标对象鱼观察对象的松耦合
2、实现广播通知注册的对象
缺点:
1、如果观察者众多,话费时间较多。
2、如果误操作目标对象,可能引起一连串的状态变更。
3、异步通知,注意多线程操作。
相关推荐
observer观察者模式
C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)
C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载
观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
通过事例和代码,详细介绍了Observer模式在android中的应用
NULL 博文链接:https://lgh3292.iteye.com/blog/600905
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
主要介绍了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题,简单讲述了观察者模式的原理并结合具体实例形式分析了使用观察者模式解决牛顿童鞋成绩问题的具体步骤相关操作技巧,并附带demo源码供读者下载参考,...
设计模式C++学习之观察者模式(Observer)
Observer(观察者模式)学习源码,该源码讲述并Observer(观察者模式)一些具体实现过程
我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...
观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里。观察者(Observer)和被观察者...
观察者模式(Observer) 用意:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。
观察者模式示例 观察者模式示例 观察者模式示例 观察者模式示例 观察者模式示例 观察者模式示例
观察者模式Observer: 以手机号码为例,老师的手机号码存在学生的手机里,若老师的手机号改变,她会发一条短信通知每个学生自己手机号变了