您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > Java设计模式23观察者模式
第23章观察者模式主讲教师:程细柱主讲教师:程细柱主讲教师:程细柱主讲教师:程细柱韶关学院计算机系韶关学院计算机系韶关学院计算机系韶关学院计算机系本书主编:刘本书主编:刘本书主编:刘本书主编:刘伟伟伟伟清华大学出版社清华大学出版社清华大学出版社清华大学出版社本章教学内容�观察者模式观察者模式观察者模式观察者模式�模式动机与定义模式动机与定义模式动机与定义模式动机与定义�模式结构与分析模式结构与分析模式结构与分析模式结构与分析�模式实例与解析模式实例与解析模式实例与解析模式实例与解析�模式效果与应用模式效果与应用模式效果与应用模式效果与应用�模式扩展模式扩展模式扩展模式扩展观察者模式�模式动机观察者模式�模式动机�建立一种建立一种建立一种建立一种对象与对象之间的依赖关系对象与对象之间的依赖关系对象与对象之间的依赖关系对象与对象之间的依赖关系,,,,一个对象发生改一个对象发生改一个对象发生改一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应变时将自动通知其他对象,其他对象将相应做出反应变时将自动通知其他对象,其他对象将相应做出反应变时将自动通知其他对象,其他对象将相应做出反应。。。。在此,发生改变的对象称为在此,发生改变的对象称为在此,发生改变的对象称为在此,发生改变的对象称为观察目标观察目标观察目标观察目标,而被通知的对象,而被通知的对象,而被通知的对象,而被通知的对象称为称为称为称为观察者观察者观察者观察者,,,,一个观察目标可以对应多个观察者一个观察目标可以对应多个观察者一个观察目标可以对应多个观察者一个观察目标可以对应多个观察者,而且,而且,而且,而且这些观察者之间没有相互联系,这些观察者之间没有相互联系,这些观察者之间没有相互联系,这些观察者之间没有相互联系,可以根据需要增加和删可以根据需要增加和删可以根据需要增加和删可以根据需要增加和删除观察者,使得系统更易于扩展除观察者,使得系统更易于扩展除观察者,使得系统更易于扩展除观察者,使得系统更易于扩展,这就是观察者模式的,这就是观察者模式的,这就是观察者模式的,这就是观察者模式的模式动机。模式动机。模式动机。模式动机。观察者模式�模式定义�观察者模式观察者模式观察者模式观察者模式(ObserverPattern)(ObserverPattern)(ObserverPattern)(ObserverPattern):定义对象间的一种:定义对象间的一种:定义对象间的一种:定义对象间的一种一对多依赖关系一对多依赖关系一对多依赖关系一对多依赖关系,使得,使得,使得,使得每当一个对象状态发生改变每当一个对象状态发生改变每当一个对象状态发生改变每当一个对象状态发生改变时,时,时,时,其其其其相关依赖对象皆得到通知并被自动更新相关依赖对象皆得到通知并被自动更新相关依赖对象皆得到通知并被自动更新相关依赖对象皆得到通知并被自动更新。观察者模式。观察者模式。观察者模式。观察者模式又叫做又叫做又叫做又叫做发布发布发布发布----订阅订阅订阅订阅((((Publish/SubscribePublish/SubscribePublish/SubscribePublish/Subscribe)模式、)模式、)模式、)模式、模型模型模型模型----视图视图视图视图((((Model/ViewModel/ViewModel/ViewModel/View)模式、)模式、)模式、)模式、源源源源----监听器监听器监听器监听器((((Source/ListenerSource/ListenerSource/ListenerSource/Listener)模式或)模式或)模式或)模式或从属者从属者从属者从属者((((DependentsDependentsDependentsDependents))))模式。观察者模式是一种模式。观察者模式是一种模式。观察者模式是一种模式。观察者模式是一种对象行为型对象行为型对象行为型对象行为型模式。模式。模式。模式。观察者模式�模式定义�ObserverPattern:ObserverPattern:ObserverPattern:ObserverPattern:DefineaDefineaDefineaDefineaone-to-manyone-to-manyone-to-manyone-to-manydependencydependencydependencydependencybetweenobjectssothatwhenbetweenobjectssothatwhenbetweenobjectssothatwhenbetweenobjectssothatwhenoneoneoneoneobjectchangesstateobjectchangesstateobjectchangesstateobjectchangesstate,,,,allitsdependentsareallitsdependentsareallitsdependentsareallitsdependentsarenotifiedandupdatedautomaticallynotifiedandupdatedautomaticallynotifiedandupdatedautomaticallynotifiedandupdatedautomatically....�Frequencyofuse:Frequencyofuse:Frequencyofuse:Frequencyofuse:highhighhighhigh模模模模式式式式结结结结构构构构观察者模式�模式结构模式结构模式结构模式结构�观察者模式包含如下角色:观察者模式包含如下角色:观察者模式包含如下角色:观察者模式包含如下角色:•Subject:Subject:Subject:Subject:目标目标目标目标•ConcreteSubject:ConcreteSubject:ConcreteSubject:ConcreteSubject:具体目标具体目标具体目标具体目标•Observer:Observer:Observer:Observer:观察者观察者观察者观察者•ConcreteObserver:ConcreteObserver:ConcreteObserver:ConcreteObserver:具体观察者具体观察者具体观察者具体观察者观察者模式�模式分析�观察者模式描述了观察者模式描述了观察者模式描述了观察者模式描述了如何建立对象与对象之间的依赖关如何建立对象与对象之间的依赖关如何建立对象与对象之间的依赖关如何建立对象与对象之间的依赖关系系系系,如何构造满足这种需求的系统。,如何构造满足这种需求的系统。,如何构造满足这种需求的系统。,如何构造满足这种需求的系统。�这一模式中的关键对象是观察目标和观察者,这一模式中的关键对象是观察目标和观察者,这一模式中的关键对象是观察目标和观察者,这一模式中的关键对象是观察目标和观察者,一个一个一个一个目目目目标标标标可以有任意数目的与之相依赖的可以有任意数目的与之相依赖的可以有任意数目的与之相依赖的可以有任意数目的与之相依赖的观察者观察者观察者观察者,一旦,一旦,一旦,一旦目标目标目标目标的状态发生改变,所有的的状态发生改变,所有的的状态发生改变,所有的的状态发生改变,所有的观察者观察者观察者观察者都将得到通知都将得到通知都将得到通知都将得到通知。。。。�作为对这个通知的响应,每个观察者都将即时更新自作为对这个通知的响应,每个观察者都将即时更新自作为对这个通知的响应,每个观察者都将即时更新自作为对这个通知的响应,每个观察者都将即时更新自己的状态,以与目标状态同步,这种交互也称为己的状态,以与目标状态同步,这种交互也称为己的状态,以与目标状态同步,这种交互也称为己的状态,以与目标状态同步,这种交互也称为发布发布发布发布----订阅订阅订阅订阅(publish-subscribe)(publish-subscribe)(publish-subscribe)(publish-subscribe)。。。。目标是通知的发布者目标是通知的发布者目标是通知的发布者目标是通知的发布者,,,,它发出通知时并不需要知道谁是它的观察者,可以有它发出通知时并不需要知道谁是它的观察者,可以有它发出通知时并不需要知道谁是它的观察者,可以有它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅它并接收通知。任意数目的观察者订阅它并接收通知。任意数目的观察者订阅它并接收通知。任意数目的观察者订阅它并接收通知。观察者模式�模式分析�典型的典型的典型的典型的抽象目标类抽象目标类抽象目标类抽象目标类代码如下所示:代码如下所示:代码如下所示:代码如下所示:importjava.util.importjava.util.importjava.util.importjava.util.****;;;;publicabstractclassSubject{publicabstractclassSubject{publicabstractclassSubject{publicabstractclassSubject{protectedArrayListobservers=newArrayList();protectedArrayListobservers=newArrayList();protectedArrayListobservers=newArrayList();protectedArrayListobservers=newArrayList();publicabstractvoidattach(Observerobserver);publicabstractvoidattach(Observerobserver);publicabstractvoidattach(Observerobserver);publicabstractvoidattach(Observerobserver);publicabstractvoiddetach(Observerobserver);publicabstractvoiddetach(Observerobserver);publicabstractvoiddetach(Observerobserver);publicabstractvoiddetach(Observerobserver);publicabstractvoidnotify();publicabstractvoidnotify();publicabstractvoidnotify();publicabstractvoidnotify();}}}}观察者模式�模式分析�典型的典型的典型的典型的具体目标类具体目标类具体目标类具体目标类代码如下所示:代码如下所示:代码如下所示:代码如下所示:publicclassConcreteSubjectextendsSubjectpublicclassConcreteSubjectextendsSubjectpublicclassConcreteSubjectextendsSubjectpublicclassConcreteSubjectextendsSubject{{{{publicvoidattach(Observerobserver)publicvoidattach(Observerobserver)publicvoidattach(Observerobserver)publicvoidattach(Observerobserver){{{{observers.add(observer);observers.add(observer);observers.add(observer);observers.add(observer);}}}}publicvoiddetach(Observerobserver)publicvoiddetach(Observerobserv
本文标题:Java设计模式23观察者模式
链接地址:https://www.777doc.com/doc-6499783 .html