Java设计模式23观察者模式.pdf

上传人:qwe****56 文档编号:69626026 上传时间:2023-01-07 格式:PDF 页数:35 大小:628.42KB
返回 下载 相关 举报
Java设计模式23观察者模式.pdf_第1页
第1页 / 共35页
Java设计模式23观察者模式.pdf_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《Java设计模式23观察者模式.pdf》由会员分享,可在线阅读,更多相关《Java设计模式23观察者模式.pdf(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第23章观察者模式主讲教师:程细柱主讲教师:程细柱主讲教师:程细柱主讲教师:程细柱 韶关学院计算机系韶关学院计算机系韶关学院计算机系韶关学院计算机系本书主编:刘本书主编:刘本书主编:刘本书主编:刘 伟伟伟伟 清华大学出版社清华大学出版社清华大学出版社清华大学出版社本章教学内容 观察者模式观察者模式观察者模式观察者模式 模式动机与定义模式动机与定义模式动机与定义模式动机与定义 模式结构与分析模式结构与分析模式结构与分析模式结构与分析 模式实例与解析模式实例与解析模式实例与解析模式实例与解析 模式效果与应用模式效果与应用模式效果与应用模式效果与应用 模式扩展模式扩展模式扩展模式扩展观察者模式模式动

2、机观察者模式 模式动机建立一种建立一种建立一种建立一种对象与对象之间的依赖关系对象与对象之间的依赖关系对象与对象之间的依赖关系对象与对象之间的依赖关系,一个对象发生改一个对象发生改一个对象发生改一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应变时将自动通知其他对象,其他对象将相应做出反应变时将自动通知其他对象,其他对象将相应做出反应变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为在此,发生改变的对象称为在此,发生改变的对象称为在此,发生改变的对象称为观察目标观察目标观察目标观察目标,而被通知的对象,而被通知的对象,而被通知的对象,而被通知的对象称为称为称为称

3、为观察者观察者观察者观察者,一个观察目标可以对应多个观察者一个观察目标可以对应多个观察者一个观察目标可以对应多个观察者一个观察目标可以对应多个观察者,而且,而且,而且,而且这些观察者之间没有相互联系,这些观察者之间没有相互联系,这些观察者之间没有相互联系,这些观察者之间没有相互联系,可以根据需要增加和删可以根据需要增加和删可以根据需要增加和删可以根据需要增加和删除观察者,使得系统更易于扩展除观察者,使得系统更易于扩展除观察者,使得系统更易于扩展除观察者,使得系统更易于扩展,这就是观察者模式的,这就是观察者模式的,这就是观察者模式的,这就是观察者模式的模式动机。模式动机。模式动机。模式动机。观察

4、者模式 模式定义观察者模式观察者模式观察者模式观察者模式(Observer Pattern)(Observer Pattern)(Observer Pattern)(Observer Pattern):定义对象间的一种:定义对象间的一种:定义对象间的一种:定义对象间的一种一对多依赖关系一对多依赖关系一对多依赖关系一对多依赖关系,使得,使得,使得,使得每当一个对象状态发生改变每当一个对象状态发生改变每当一个对象状态发生改变每当一个对象状态发生改变时,时,时,时,其其其其相关依赖对象皆得到通知并被自动更新相关依赖对象皆得到通知并被自动更新相关依赖对象皆得到通知并被自动更新相关依赖对象皆得到通知并被

5、自动更新。观察者模式。观察者模式。观察者模式。观察者模式又叫做又叫做又叫做又叫做发布发布发布发布-订阅订阅订阅订阅(Publish/SubscribePublish/SubscribePublish/SubscribePublish/Subscribe)模式、)模式、)模式、)模式、模型模型模型模型-视图视图视图视图(Model/ViewModel/ViewModel/ViewModel/View)模式、)模式、)模式、)模式、源源源源-监听器监听器监听器监听器(Source/ListenerSource/ListenerSource/ListenerSource/Listener)模式或)模

6、式或)模式或)模式或从属者从属者从属者从属者(DependentsDependentsDependentsDependents)模式。观察者模式是一种模式。观察者模式是一种模式。观察者模式是一种模式。观察者模式是一种对象行为型对象行为型对象行为型对象行为型模式。模式。模式。模式。观察者模式 模式定义Observer Pattern:Observer Pattern:Observer Pattern:Observer Pattern:Define a Define a Define a Define a one-to-many one-to-many one-to-many one-to-man

7、y dependencydependencydependencydependency between objects so that when between objects so that when between objects so that when between objects so that when one one one one object changes stateobject changes stateobject changes stateobject changes state,all its dependents are all its dependents ar

8、e all its dependents are all its dependents are notified and updated automaticallynotified and updated automaticallynotified and updated automaticallynotified and updated automatically.Frequency of use:Frequency of use:Frequency of use:Frequency of use:highhighhighhigh 模模模模式式式式结结结结构构构构观察者模式 模式结构模式结构

9、模式结构模式结构观察者模式包含如下角色:观察者模式包含如下角色:观察者模式包含如下角色:观察者模式包含如下角色:Subject:Subject:Subject:Subject:目标目标目标目标 ConcreteSubject:ConcreteSubject:ConcreteSubject:ConcreteSubject:具体目标具体目标具体目标具体目标 Observer:Observer:Observer:Observer:观察者观察者观察者观察者 ConcreteObserver:ConcreteObserver:ConcreteObserver:ConcreteObserver:具体观察者

10、具体观察者具体观察者具体观察者观察者模式 模式分析观察者模式描述了观察者模式描述了观察者模式描述了观察者模式描述了如何建立对象与对象之间的依赖关如何建立对象与对象之间的依赖关如何建立对象与对象之间的依赖关如何建立对象与对象之间的依赖关系系系系,如何构造满足这种需求的系统。,如何构造满足这种需求的系统。,如何构造满足这种需求的系统。,如何构造满足这种需求的系统。这一模式中的关键对象是观察目标和观察者,这一模式中的关键对象是观察目标和观察者,这一模式中的关键对象是观察目标和观察者,这一模式中的关键对象是观察目标和观察者,一个一个一个一个目目目目标标标标可以有任意数目的与之相依赖的可以有任意数目的与

11、之相依赖的可以有任意数目的与之相依赖的可以有任意数目的与之相依赖的观察者观察者观察者观察者,一旦,一旦,一旦,一旦目标目标目标目标的状态发生改变,所有的的状态发生改变,所有的的状态发生改变,所有的的状态发生改变,所有的观察者观察者观察者观察者都将得到通知都将得到通知都将得到通知都将得到通知。作为对这个通知的响应,每个观察者都将即时更新自作为对这个通知的响应,每个观察者都将即时更新自作为对这个通知的响应,每个观察者都将即时更新自作为对这个通知的响应,每个观察者都将即时更新自己的状态,以与目标状态同步,这种交互也称为己的状态,以与目标状态同步,这种交互也称为己的状态,以与目标状态同步,这种交互也称

12、为己的状态,以与目标状态同步,这种交互也称为发布发布发布发布-订阅订阅订阅订阅(publish-subscribe)(publish-subscribe)(publish-subscribe)(publish-subscribe)。目标是通知的发布者目标是通知的发布者目标是通知的发布者目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有它发出通知时并不需要知道谁是它的观察者,可以有它发出通知时并不需要知道谁是它的观察者,可以有它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅它并接收通知。任意数目的观察者订阅它并接收通知。任意数目的观察者订阅它并接收通知。任意数目

13、的观察者订阅它并接收通知。观察者模式 模式分析 典型的典型的典型的典型的抽象目标类抽象目标类抽象目标类抽象目标类代码如下所示:代码如下所示:代码如下所示:代码如下所示:import java.util.import java.util.import java.util.import java.util.*;public abstract class Subject public abstract class Subject public abstract class Subject public abstract class Subject protected ArrayList observ

14、ers=new ArrayList();protected ArrayList observers=new ArrayList();protected ArrayList observers=new ArrayList();protected ArrayList observers=new ArrayList();public abstract void attach(Observer observer);public abstract void attach(Observer observer);public abstract void attach(Observer observer);p

15、ublic abstract void attach(Observer observer);public abstract void detach(Observer observer);public abstract void detach(Observer observer);public abstract void detach(Observer observer);public abstract void detach(Observer observer);public abstract void notify();public abstract void notify();public

16、 abstract void notify();public abstract void notify();观察者模式 模式分析 典型的典型的典型的典型的具体目标类具体目标类具体目标类具体目标类代码如下所示:代码如下所示:代码如下所示:代码如下所示:public class ConcreteSubject extends Subjectpublic class ConcreteSubject extends Subjectpublic class ConcreteSubject extends Subjectpublic class ConcreteSubject extends Subjec

17、t public void attach(Observer observer)public void attach(Observer observer)public void attach(Observer observer)public void attach(Observer observer)observers.add(observer);observers.add(observer);observers.add(observer);observers.add(observer);public void detach(Observer observer)public void detac

18、h(Observer observer)public void detach(Observer observer)public void detach(Observer observer)observers.remove(observer);observers.remove(observer);observers.remove(observer);observers.remove(observer);public void notify()public void notify()public void notify()public void notify()for(Object obs:obs

19、ervers)for(Object obs:observers)for(Object obs:observers)for(Object obs:observers)(Observer)obs).update();(Observer)obs).update();(Observer)obs).update();(Observer)obs).update();观察者模式 模式分析 典型的典型的典型的典型的抽象观察者抽象观察者抽象观察者抽象观察者代码如下所示:代码如下所示:代码如下所示:代码如下所示:public interface Observerpublic interface Observerp

20、ublic interface Observerpublic interface Observer public void update();public void update();public void update();public void update();观察者模式 模式分析 典型的典型的典型的典型的具体观察者具体观察者具体观察者具体观察者代码如下所示:代码如下所示:代码如下所示:代码如下所示:public class ConcreteObserver implements Observerpublic class ConcreteObserver implements Obser

21、verpublic class ConcreteObserver implements Observerpublic class ConcreteObserver implements Observer public void update()public void update()public void update()public void update()/具体更新代码具体更新代码具体更新代码具体更新代码 观察者模式 模式分析 客户端客户端客户端客户端代码片段如下所示:代码片段如下所示:代码片段如下所示:代码片段如下所示:Subject subject=new ConcreteSubje

22、ct();Subject subject=new ConcreteSubject();Subject subject=new ConcreteSubject();Subject subject=new ConcreteSubject();Observer observer=new ConcreteObserver();Observer observer=new ConcreteObserver();Observer observer=new ConcreteObserver();Observer observer=new ConcreteObserver();subject.attach(ob

23、server);subject.attach(observer);subject.attach(observer);subject.attach(observer);subject.notify();subject.notify();subject.notify();subject.notify();观察者模式 模式分析 观察者模式观察者模式观察者模式观察者模式顺序图顺序图顺序图顺序图如下所示:如下所示:如下所示:如下所示:Observer_SDnotify()attach()new()new()clientconcreteSubjectconcreteObserverupdate()noti

24、fy()attach()new()new()update()观察者模式 观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析实例一:猫、狗与老鼠实例一:猫、狗与老鼠实例一:猫、狗与老鼠实例一:猫、狗与老鼠 假设猫是老鼠和狗的观察目标,老鼠和狗是观假设猫是老鼠和狗的观察目标,老鼠和狗是观假设猫是老鼠和狗的观察目标,老鼠和狗是观假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,察者,察者,察者,猫叫老鼠跑猫叫老鼠跑猫叫老鼠跑猫叫老鼠跑,狗也跟着叫狗也跟着叫狗也跟着叫狗也跟着叫,使用观察者,使用观察者,使用观察者,使用观察者模式描述该过程。模式描述该过程。模式描述该过程。模式

25、描述该过程。观察者模式 观察者模式实例与解析实例一:猫、狗与老鼠实例一:猫、狗与老鼠实例一:猫、狗与老鼠实例一:猫、狗与老鼠 observersCat+cry():voidMouse+response():voidMyObserver+response():voidMySubjectabstract#observers:ArrayList+attach(MyObserver obs)detach(MyObserver obs)cry():void:void:voidDog+response():void观察者模式 观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析

26、实例一:猫、狗与老鼠实例一:猫、狗与老鼠实例一:猫、狗与老鼠实例一:猫、狗与老鼠 参考代码:参考代码:参考代码:参考代码:Chapter 23 Observersample01Chapter 23 Observersample01Chapter 23 Observersample01Chapter 23 Observersample01 下载地址:下载地址:下载地址:下载地址:http:/ 观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析实例二:自定义登录控件实例二:自定义登录控件实例二:自定义登录控件实例二:自定义登录控件 JavaJavaJavaJava事件

27、处理模型中应用了观察者模式事件处理模型中应用了观察者模式事件处理模型中应用了观察者模式事件处理模型中应用了观察者模式,下面,下面,下面,下面通过一个实例来学习如何自定义通过一个实例来学习如何自定义通过一个实例来学习如何自定义通过一个实例来学习如何自定义JavaJavaJavaJava控件控件控件控件,并并并并给该控件增加相应的事件给该控件增加相应的事件给该控件增加相应的事件给该控件增加相应的事件。该实例基于。该实例基于。该实例基于。该实例基于Java Java Java Java Swing/AWTSwing/AWTSwing/AWTSwing/AWT控件,在控件,在控件,在控件,在Swing

28、/AWTSwing/AWTSwing/AWTSwing/AWT的相关类中封装的相关类中封装的相关类中封装的相关类中封装了对事件的底层处理。了对事件的底层处理。了对事件的底层处理。了对事件的底层处理。观察者模式 观察者模式实例与解析实例二:自定义登录控件实例二:自定义登录控件实例二:自定义登录控件实例二:自定义登录控件 lelelLoginValidatorA+LoginValidatorA()validateLogin(LoginEvent event):voidLoginEventListener+validateLogin(LoginEvent event):voidLoginBeanab

29、stract-lelle:LoginEventListener:LoginEvent+LoginBean()addLoginEventListener(LoginEventListener lel)fireLoginEvent(Object object,String userName,String password)actionPerformed(ActionEvent event):void:void:voidLoginValidatorB+LoginValidatorB()validateLogin(LoginEvent event):voidLoginEvent-userNamepas

30、sword:String:String+LoginEvent()setUserName(String userName)getUserName()setPassword(String password)getPassword():void:String:void:String事件类:传递的数据事件类:传递的数据监听器:抽象观察者监听器:抽象观察者登录界面:具体观察者登录界面:具体观察者登录组件:具体目标登录组件:具体目标观察者模式 观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析观察者模式实例与解析实例二:自定义登录控件实例二:自定义登录控件实例二:自定义登录控件实例二:自定义登录

31、控件 参考代码:参考代码:参考代码:参考代码:Chapter 23 Observersample02Chapter 23 Observersample02Chapter 23 Observersample02Chapter 23 Observersample02 下载地址:下载地址:下载地址:下载地址:http:/ 模式优缺点模式优缺点模式优缺点模式优缺点观察者模式的优点:观察者模式的优点:观察者模式的优点:观察者模式的优点:观察者模式可以观察者模式可以观察者模式可以观察者模式可以实现表示层和数据逻辑层的分离实现表示层和数据逻辑层的分离实现表示层和数据逻辑层的分离实现表示层和数据逻辑层的分离,

32、并并并并定义了稳定的消息更新传递机制定义了稳定的消息更新传递机制定义了稳定的消息更新传递机制定义了稳定的消息更新传递机制,抽象了更新接口,抽象了更新接口,抽象了更新接口,抽象了更新接口,使得可以有各种各样不同的表示层作为具体观察者角使得可以有各种各样不同的表示层作为具体观察者角使得可以有各种各样不同的表示层作为具体观察者角使得可以有各种各样不同的表示层作为具体观察者角色。色。色。色。观察者模式在观察目标和观察者之间观察者模式在观察目标和观察者之间观察者模式在观察目标和观察者之间观察者模式在观察目标和观察者之间建立一个抽象的建立一个抽象的建立一个抽象的建立一个抽象的耦合耦合耦合耦合。观察者模式观

33、察者模式观察者模式观察者模式支持广播通信支持广播通信支持广播通信支持广播通信。观察者模式观察者模式观察者模式观察者模式符合符合符合符合“开闭原则开闭原则开闭原则开闭原则”的要求。的要求。的要求。的要求。观察者模式 模式优缺点模式优缺点模式优缺点模式优缺点观察者模式的缺点:观察者模式的缺点:观察者模式的缺点:观察者模式的缺点:如果如果如果如果一个观察目标对象一个观察目标对象一个观察目标对象一个观察目标对象有很多有很多有很多有很多直接和间接的直接和间接的直接和间接的直接和间接的观察者观察者观察者观察者的的的的话,话,话,话,将所有的观察者都将所有的观察者都将所有的观察者都将所有的观察者都通知通知通

34、知通知到到到到会花费很多时间会花费很多时间会花费很多时间会花费很多时间。如果如果如果如果在观察者和观察目标之间在观察者和观察目标之间在观察者和观察目标之间在观察者和观察目标之间有循环依赖的话有循环依赖的话有循环依赖的话有循环依赖的话,观察,观察,观察,观察目标会触发它们之间目标会触发它们之间目标会触发它们之间目标会触发它们之间进行循环调用进行循环调用进行循环调用进行循环调用,可能导致系统崩可能导致系统崩可能导致系统崩可能导致系统崩溃溃溃溃。观察者模式观察者模式观察者模式观察者模式没有相应的机制让观察者知道所观察的目没有相应的机制让观察者知道所观察的目没有相应的机制让观察者知道所观察的目没有相应

35、的机制让观察者知道所观察的目标对象是怎么发生变化的标对象是怎么发生变化的标对象是怎么发生变化的标对象是怎么发生变化的,而仅仅只是知道观察目标,而仅仅只是知道观察目标,而仅仅只是知道观察目标,而仅仅只是知道观察目标发生了变化。发生了变化。发生了变化。发生了变化。观察者模式 模式适用环境模式适用环境模式适用环境模式适用环境在以下情况下可以使用观察者模式:在以下情况下可以使用观察者模式:在以下情况下可以使用观察者模式:在以下情况下可以使用观察者模式:一个抽象模型有一个抽象模型有一个抽象模型有一个抽象模型有两个方面两个方面两个方面两个方面,其中,其中,其中,其中一个方面依赖于另一一个方面依赖于另一一个

36、方面依赖于另一一个方面依赖于另一个方面个方面个方面个方面。将这些方面。将这些方面。将这些方面。将这些方面封装在独立的对象中使它们可以封装在独立的对象中使它们可以封装在独立的对象中使它们可以封装在独立的对象中使它们可以各自独立地改变和复用各自独立地改变和复用各自独立地改变和复用各自独立地改变和复用。一个对象的改变将导致其他一个或多个对象也发生改一个对象的改变将导致其他一个或多个对象也发生改一个对象的改变将导致其他一个或多个对象也发生改一个对象的改变将导致其他一个或多个对象也发生改变变变变,而,而,而,而不知道具体有多少对象将发生改变,不知道具体有多少对象将发生改变,不知道具体有多少对象将发生改变

37、,不知道具体有多少对象将发生改变,可以降低可以降低可以降低可以降低对象之间的耦合度。对象之间的耦合度。对象之间的耦合度。对象之间的耦合度。一个对象必须通知其他对象,而并不知道这些对象是一个对象必须通知其他对象,而并不知道这些对象是一个对象必须通知其他对象,而并不知道这些对象是一个对象必须通知其他对象,而并不知道这些对象是谁谁谁谁。需要在系统中创建一个触发链需要在系统中创建一个触发链需要在系统中创建一个触发链需要在系统中创建一个触发链,A A A A对象的行为将影响对象的行为将影响对象的行为将影响对象的行为将影响B B B B对象,对象,对象,对象,B B B B对象的行为将影响对象的行为将影响

38、对象的行为将影响对象的行为将影响C C C C对象对象对象对象,可以使用观察,可以使用观察,可以使用观察,可以使用观察者模式创建一种者模式创建一种者模式创建一种者模式创建一种链式触发机制链式触发机制链式触发机制链式触发机制。观察者模式 模式应用模式应用模式应用模式应用(1)JDK1.1(1)JDK1.1(1)JDK1.1(1)JDK1.1版本及以后的各个版本中,版本及以后的各个版本中,版本及以后的各个版本中,版本及以后的各个版本中,事件处理模型事件处理模型事件处理模型事件处理模型采采采采用基于观察者模式的用基于观察者模式的用基于观察者模式的用基于观察者模式的委派事件模型委派事件模型委派事件模型

39、委派事件模型(Delegation Event(Delegation Event(Delegation Event(Delegation Event Model,DEM)Model,DEM)Model,DEM)Model,DEM)。在在在在DEMDEMDEMDEM中,事件的发布者称为中,事件的发布者称为中,事件的发布者称为中,事件的发布者称为事件源事件源事件源事件源(Event Source)(Event Source)(Event Source)(Event Source),而订阅者叫做而订阅者叫做而订阅者叫做而订阅者叫做事件监听器事件监听器事件监听器事件监听器(Event Listener

40、)(Event Listener)(Event Listener)(Event Listener),在这个过,在这个过,在这个过,在这个过程中还可以通过程中还可以通过程中还可以通过程中还可以通过事件对象事件对象事件对象事件对象(Event Object)(Event Object)(Event Object)(Event Object)来传递与事件来传递与事件来传递与事件来传递与事件相关的信息,可以在事件监听者的实现类中实现事件处相关的信息,可以在事件监听者的实现类中实现事件处相关的信息,可以在事件监听者的实现类中实现事件处相关的信息,可以在事件监听者的实现类中实现事件处理,因此事件监听对象又

41、可以称为事件处理对象。理,因此事件监听对象又可以称为事件处理对象。理,因此事件监听对象又可以称为事件处理对象。理,因此事件监听对象又可以称为事件处理对象。事件源对象事件源对象事件源对象事件源对象、事件监听对象(事件处理对象)事件监听对象(事件处理对象)事件监听对象(事件处理对象)事件监听对象(事件处理对象)和和和和事件对事件对事件对事件对象象象象构成了构成了构成了构成了JavaJavaJavaJava事件处理模型的三要素。事件处理模型的三要素。事件处理模型的三要素。事件处理模型的三要素。观察者模式 模式应用(2)(2)(2)(2)除了除了除了除了AWTAWTAWTAWT中的事件处理之外,中的事

42、件处理之外,中的事件处理之外,中的事件处理之外,JavaJavaJavaJava语言解析语言解析语言解析语言解析XMLXMLXMLXML的技的技的技的技术术术术SAX2SAX2SAX2SAX2以及以及以及以及ServletServletServletServlet技术的事件处理机制技术的事件处理机制技术的事件处理机制技术的事件处理机制都基于都基于都基于都基于DEMDEMDEMDEM,它,它,它,它们都是观察者模式的应用。们都是观察者模式的应用。们都是观察者模式的应用。们都是观察者模式的应用。(3)(3)(3)(3)观察者模式在软件开发中应用非常广泛,如观察者模式在软件开发中应用非常广泛,如观察

43、者模式在软件开发中应用非常广泛,如观察者模式在软件开发中应用非常广泛,如某电子某电子某电子某电子商务网站商务网站商务网站商务网站可以在执行发送操作后给用户多个发送商品打可以在执行发送操作后给用户多个发送商品打可以在执行发送操作后给用户多个发送商品打可以在执行发送操作后给用户多个发送商品打折信息,某团队战斗折信息,某团队战斗折信息,某团队战斗折信息,某团队战斗游戏中游戏中游戏中游戏中某队友牺牲将给所有成员提某队友牺牲将给所有成员提某队友牺牲将给所有成员提某队友牺牲将给所有成员提示等等,示等等,示等等,示等等,凡是涉及到一对一或者一对多的对象交互场景凡是涉及到一对一或者一对多的对象交互场景凡是涉及

44、到一对一或者一对多的对象交互场景凡是涉及到一对一或者一对多的对象交互场景都可以使用观察者模式都可以使用观察者模式都可以使用观察者模式都可以使用观察者模式。观察者模式 模式扩展模式扩展模式扩展模式扩展JavaJavaJavaJava语言提供的对观察者模式的支持语言提供的对观察者模式的支持语言提供的对观察者模式的支持语言提供的对观察者模式的支持 在在在在JDKJDKJDKJDK的的的的java.utiljava.utiljava.utiljava.util包中,提供了包中,提供了包中,提供了包中,提供了ObservableObservableObservableObservable目标类目标类目标

45、类目标类以及以及以及以及ObserverObserverObserverObserver接口(抽象观察者)接口(抽象观察者)接口(抽象观察者)接口(抽象观察者),它们构成了它们构成了它们构成了它们构成了JavaJavaJavaJava语言对观察者模式的支持。语言对观察者模式的支持。语言对观察者模式的支持。语言对观察者模式的支持。如下图:如下图:如下图:如下图:观察者模式obsConcreteObservableConcreteObserver+update(Observable o,Object arg):voidObserver+update(Observable o,Object arg)

46、:voidObservable-changedobs:boolean:Vector=false+Observable()addObserver(Observer o)deleteObserver(Observer o)notifyObservers()notifyObservers(Object arg)deleteObservers()setChanged()clearChanged()hasChanged()countObservers():void:void:void:void:void:void:void:boolean:int观察者模式模式扩展JavaJavaJavaJava语言提供

47、的对观察者模式的支持语言提供的对观察者模式的支持语言提供的对观察者模式的支持语言提供的对观察者模式的支持 ObserverObserverObserverObserver接口(抽象观察者)接口(抽象观察者)接口(抽象观察者)接口(抽象观察者)ObservableObservableObservableObservable类(目标类)类(目标类)类(目标类)类(目标类)Observable()Observable()Observable()Observable()addObserver(Observer o)addObserver(Observer o)addObserver(Observer

48、o)addObserver(Observer o)deleteObserver(Observer o)deleteObserver(Observer o)deleteObserver(Observer o)deleteObserver(Observer o)notifyObservers()notifyObservers()notifyObservers()notifyObservers()、notifyObservers(Object arg)notifyObservers(Object arg)notifyObservers(Object arg)notifyObservers(Objec

49、t arg)deleteObservers deleteObservers deleteObservers deleteObservers setChanged()setChanged()setChanged()setChanged()clearChanged()clearChanged()clearChanged()clearChanged()hasChanged()hasChanged()hasChanged()hasChanged()countObservers()countObservers()countObservers()countObservers()void update(Ob

50、servable o,Object arg);观察者模式 模式扩展模式扩展模式扩展模式扩展 MVCMVCMVCMVC模式模式模式模式 MVCMVCMVCMVC模式模式模式模式是一种架构模式,它包含三个角色:是一种架构模式,它包含三个角色:是一种架构模式,它包含三个角色:是一种架构模式,它包含三个角色:模型模型模型模型(Model)(Model)(Model)(Model),视图视图视图视图(View)(View)(View)(View)和和和和控制器控制器控制器控制器(Controller)(Controller)(Controller)(Controller)。观察。观察。观察。观察者模式可

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 财经金融

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁