- 浏览: 262435 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
cuiqi4016:
正在做json转换的功能,帮大忙了,感谢博主分享
java 通过反射获取泛型的类型 -
cxshun:
写得很好,感谢博主的分享
java 通过反射获取泛型的类型 -
joy3229233:
[url][/url][flash=200,200][/fla ...
(转)flex checkbox 选中 -
linkagebest:
盗版可耻。。。。。
(转)flex checkbox 选中 -
shuai0420:
...
flex数据绑定
一、Observer模式的意图:
在对象的内部状态发生变化时,自动通知外部对象进行响应。
二、Observer模式的构成:
·被观察者:内部状态有可能被改变,而且又需要通知外部的对象
·观察者:需要对内部状态的改变做出响应的对象
三、Observer模式的Java实现:
Java的API中已经为我们提供了Observer模式的实现。具体由java.util.Observable类和java.util.Observer接口完成。
前者有两个重要的方法:
·setChanged:设置内部状态为已改变
·notifyObservers(Object obj):通知观察者所发生的改变,参数obj是一些改变的信息
后者有一个核心方法:
·update(Object obj):相应被观察者的改变,其中obj就是被观察者传递过来的信息,该方法会在notifyObservers被调用时自动调用。
下面是Observer模式的实现过程:
·创建一个被观察者,继承java.util.Observable
·创建一个观察者,实现java.util.Observer接口
·注册观察着,调用addObserver(Observer observer)
·在被观察者改变对象内部状态的地方,调用setChanged()方法,然后调用notifyObservers(Object)方法,通知被观察者
·在观察者的update(Object)方法中,对改变做出响应。
四、Observer模式的好处:
1.Observer模式的优点:
·被观察者只需要知道谁在观察它,无需知道具体的观察细节
·被观察者一旦发生变化,只需要通过广播的方式告知观察者,至于消息如何到达则不需知道。这样的话无疑消除了被观察者和观察者之间通信的硬编码
·当一个被观察者同时被多个观察着观察时,观察者可以只选择自己感兴趣的事件,而忽略其它的事件
·多个观察者组合起来可以形成一个观察链,如果一旦需要回滚多个操作,此时观察链可以发挥作用
·观察者可以实时对被观察对象的变化做出响应,例如自动告警、中断运行等
2.运用Observer模式可以
·屏蔽线程间的通信机制:例如两个线程之间,主线程可以作为观察者,执行线程是被观察者。彼此之间只知道对方存在,但不知道之间通信的细节
·消除硬编码:如果没有Observer模式,则只能采用回调的模式,或者在代码中显示地调用观察者
·优化异常机制:特别适合在异常发生时向顶层监控,减少try-catch代码量
Observer模式的功用,是希望两个(或多个)对象,我们称之为Subject和Observer,当一方的状态发生改变的时候,另一方能够得到通知。也就是说,作为Observer的一方,能够监视到Subject的某个特定的状态变化,并为之做出反应。
我对观察者理解就是一个中心点把所有变化的信息都收集上来,这个中心点有一个名单,根据名单把所有变化的信息散发出去。下面是对学生和老师发送的会议通知:
Java代码
1. public interface Subject //
2. {
3. public void register(Object object);
4. public void remove(Object object);
5. public void nofiyObserver();
6. public void setMeeting(String meeting);
7. }
8.
9. public class SubjectCenter implements Subject
10. {
11. private List<Object> list = new ArrayList<Object>();
12. private String meeting;
13.
14. public void register(Object object);
15. {
16. list.add(object);//survey name list
17. }
18.
19. public void remove(Object object);
20. {
21. if(list.indexOf(object) > 0) //remove name list
22. list.remove(i);
23. }
24.
25. public void nofiyObserver();
26. {
27. for(int i = 0;i < list.size();i++)
28. {
29. Observer observer =(Observer)list.get(i);
30. //nofiy student and teacher join to meeting
31. observer.update(meeting);
32. }
33. }
34.
35. public void setMeeting(Sting meet)
36. {
37. this.meeting = meeting;//the school have a meeting;
38. nofiyObserver(); // send meeting message
39. }
40. }
41.
42. public interface Observer
43. {
44. public void update(String info);
45. }
46.
47. public class Student implements Observer
48. {
49. public void update(String info)
50. {
51. System.out.println("Hi Guys ,Today have a meeting about" +info);
52. }
53. }
54.
55. public class Teacher implements Observer
56. {
57. public void update(String info)
58. {
59. System.out.println("Hi Sir,Today have a meeting about"+info);
60. }
61.
62. }
63.
64. public class TestObserver
65. {
66. public static void main(String[]args)
67. {
68. Subject subject = new SubjectCenter();
69. Oberver student = new Student();
70. Oberver teacher = new Teacher();
71. subject.register(student);//add student observer
72. subject.register(teacher); //add teacher observer
73. subject.setMeeting("Wrap-up meeting");
74. }
75. }
在对象的内部状态发生变化时,自动通知外部对象进行响应。
二、Observer模式的构成:
·被观察者:内部状态有可能被改变,而且又需要通知外部的对象
·观察者:需要对内部状态的改变做出响应的对象
三、Observer模式的Java实现:
Java的API中已经为我们提供了Observer模式的实现。具体由java.util.Observable类和java.util.Observer接口完成。
前者有两个重要的方法:
·setChanged:设置内部状态为已改变
·notifyObservers(Object obj):通知观察者所发生的改变,参数obj是一些改变的信息
后者有一个核心方法:
·update(Object obj):相应被观察者的改变,其中obj就是被观察者传递过来的信息,该方法会在notifyObservers被调用时自动调用。
下面是Observer模式的实现过程:
·创建一个被观察者,继承java.util.Observable
·创建一个观察者,实现java.util.Observer接口
·注册观察着,调用addObserver(Observer observer)
·在被观察者改变对象内部状态的地方,调用setChanged()方法,然后调用notifyObservers(Object)方法,通知被观察者
·在观察者的update(Object)方法中,对改变做出响应。
四、Observer模式的好处:
1.Observer模式的优点:
·被观察者只需要知道谁在观察它,无需知道具体的观察细节
·被观察者一旦发生变化,只需要通过广播的方式告知观察者,至于消息如何到达则不需知道。这样的话无疑消除了被观察者和观察者之间通信的硬编码
·当一个被观察者同时被多个观察着观察时,观察者可以只选择自己感兴趣的事件,而忽略其它的事件
·多个观察者组合起来可以形成一个观察链,如果一旦需要回滚多个操作,此时观察链可以发挥作用
·观察者可以实时对被观察对象的变化做出响应,例如自动告警、中断运行等
2.运用Observer模式可以
·屏蔽线程间的通信机制:例如两个线程之间,主线程可以作为观察者,执行线程是被观察者。彼此之间只知道对方存在,但不知道之间通信的细节
·消除硬编码:如果没有Observer模式,则只能采用回调的模式,或者在代码中显示地调用观察者
·优化异常机制:特别适合在异常发生时向顶层监控,减少try-catch代码量
Observer模式的功用,是希望两个(或多个)对象,我们称之为Subject和Observer,当一方的状态发生改变的时候,另一方能够得到通知。也就是说,作为Observer的一方,能够监视到Subject的某个特定的状态变化,并为之做出反应。
我对观察者理解就是一个中心点把所有变化的信息都收集上来,这个中心点有一个名单,根据名单把所有变化的信息散发出去。下面是对学生和老师发送的会议通知:
Java代码
1. public interface Subject //
2. {
3. public void register(Object object);
4. public void remove(Object object);
5. public void nofiyObserver();
6. public void setMeeting(String meeting);
7. }
8.
9. public class SubjectCenter implements Subject
10. {
11. private List<Object> list = new ArrayList<Object>();
12. private String meeting;
13.
14. public void register(Object object);
15. {
16. list.add(object);//survey name list
17. }
18.
19. public void remove(Object object);
20. {
21. if(list.indexOf(object) > 0) //remove name list
22. list.remove(i);
23. }
24.
25. public void nofiyObserver();
26. {
27. for(int i = 0;i < list.size();i++)
28. {
29. Observer observer =(Observer)list.get(i);
30. //nofiy student and teacher join to meeting
31. observer.update(meeting);
32. }
33. }
34.
35. public void setMeeting(Sting meet)
36. {
37. this.meeting = meeting;//the school have a meeting;
38. nofiyObserver(); // send meeting message
39. }
40. }
41.
42. public interface Observer
43. {
44. public void update(String info);
45. }
46.
47. public class Student implements Observer
48. {
49. public void update(String info)
50. {
51. System.out.println("Hi Guys ,Today have a meeting about" +info);
52. }
53. }
54.
55. public class Teacher implements Observer
56. {
57. public void update(String info)
58. {
59. System.out.println("Hi Sir,Today have a meeting about"+info);
60. }
61.
62. }
63.
64. public class TestObserver
65. {
66. public static void main(String[]args)
67. {
68. Subject subject = new SubjectCenter();
69. Oberver student = new Student();
70. Oberver teacher = new Teacher();
71. subject.register(student);//add student observer
72. subject.register(teacher); //add teacher observer
73. subject.setMeeting("Wrap-up meeting");
74. }
75. }
发表评论
-
JVM内存管理:深入垃圾收集器与内存分配策略
2012-09-29 09:40 916转自http://icyfenix.iteye.com ... -
javaVM 内存管理
2012-09-29 09:18 1039转自http://icyfenix.iteye.com/blo ... -
使用J2SE API读取Properties文件的六种方法
2012-03-15 11:46 9421。使用java.util.Properties ... -
java设计模式 -Decorator
2012-03-01 16:05 968//抽象构件角色 abstract public c ... -
设计模式------Decorator
2012-03-01 14:29 805一、学习装饰着模式 1、定义及作用 该模式以对 ... -
正则表达式学习
2011-12-31 09:56 1061//正则表达式去掉中文 public static vo ... -
System.gc()
2011-06-24 17:40 1034最近在在翻看java的Garbage Collection,即 ... -
java gc(转)
2011-06-24 16:07 970<%@ page contentType="t ... -
hibernate
2011-06-24 11:29 01.hibernate lazy, inverse, casc ... -
详解spring事务属性(转)
2011-06-10 10:46 819Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我 ... -
spring心得(转)
2011-06-03 11:00 8411、spring原理 s ... -
实战Concurrent
2011-05-30 17:45 915编写多线程的程序一直都是一件比较麻烦的事情,要考虑很多事情,处 ... -
Memcached(转)
2011-05-30 17:32 954我对于Memcached的接触,还是在去年看了CSDN的一系列 ... -
动态创建代理(转)
2011-04-21 11:22 1053随着Proxy的流行,Sun把它纳入到JDK1.3实现了Jav ... -
代理模式(转)
2011-04-21 11:17 902代理模式是常用的Java 设计模式,它的特征是代理类与委托类有 ... -
工厂模式
2011-04-18 15:35 1052简单工厂,工厂方法和 ... -
java 通过反射获取泛型的类型
2011-03-24 13:34 32175jdk1.5开始支持泛型,所以我们有时需要把泛型里定义的对象的 ... -
java反射学习(转)
2011-03-22 15:51 1010Java提供了一套机制来动态执行方法和构造方法,以及数组操作等 ... -
java反射(转)
2011-03-22 15:29 970Java的反射机制是Java特 ... -
Quartz学习
2010-11-09 13:20 9321.与Spring集成 Spring中与quartz 的结合方 ...
相关推荐
Observer观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这个模式的核心概念是发布-订阅,即发布者(被观察对象)向订阅者(观察者)广播事件或...
**C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...
### (行为型模式) Observer 观察者模式 #### 概述 观察者模式是一种行为设计模式,它定义了一种一对多的关系,让多个观察对象同时监听某一个主题对象。当主题对象发生变化时,所有观察者对象都会收到通知并进行...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在软件工程中,这常用于实现事件驱动编程,使得系统能够及时响应变化。 在...
2.Observer(观察者) 为那些在目标发生改变时需获得通知的对象定义一个更新接口。 3.ConcreteSubject(具体目标) 将有关状态存入各ConcreteObserver对象。 当它的状态发生改变时,向它的各个观察者发出通知。...
本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...
在观察者模式中,通常有两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它持有一个观察者列表,并负责通知这些观察者状态的变化。观察者是依赖主题的对象,当接收到主题的通知时,它们会...
这个模式的核心概念是一个主题(Subject)对象和一个或多个观察者(Observer)对象之间的关系,主题可以被多个观察者监视,当主题的状态发生改变时,会自动通知所有观察者。 在Java中,`java.beans....
观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...
本文实例讲述了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题。分享给大家供大家参考,具体如下: 一.理论定义 观察者模式 描述了 一种 一对多的关系。 当某一对象的状态发生改变时,其他对象会得到 改变的...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者(Observer)模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java编程语言中,这种模式被内置在`java.util.Observable`和`java.util.Observer`类...
观察者模式(Observer)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在软件开发中广泛应用于事件处理和实时...
- `addObserver(Observer o)`:添加一个新的观察者到观察者列表。 - `deleteObserver(Observer o)`:移除指定的观察者。 - `notifyObservers()`或`notifyObservers(Object arg)`:当被观察对象的状态改变时,调用...
观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...