`
xyheqhd888
  • 浏览: 409215 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

Observer(观察者)模式一

阅读更多

Observer模式的宗旨是在多个对象之间定义一对多的关系,以便当一个对象状态改变的时候,其他所有依赖于这个对象的对象都能够得到通知,并被自动更新。

1.经典范例:

   借助于Observer模式,当某个对象发生变化时,关注该对象的其他对象可以被通知。这种模式的一个最常见的例子是图形用户界面。每当图形界面的用户单击按钮或者调整滑动条的时候,该应用程序中许多对象都会对此做出反应。Java开发者假定应用程序都会关心图形界面用户何时改变GUI组件。很显然,Observer模式在Java Swing库中得到了广泛应用。在Java Swing架构中,关注Swing组件变化的类被称为“监听器”。我们可以为自己关心的每个事件注册一个监听器,以便组件事件发生的时候,我们能够得到通知。

 

ShowBallistics类和BallisticsPanel类位于app.observer.ballistics包中。BallisticsFunction接口位于com.oozinoz.ballistics包中,它定义了燃烧速率和推进力曲线。该Java包中还有一个Ballisticstics工具类,它实现了BallisticsFunction接口。

这个弹道学应用程序在初始化滑动条的时候,将自己注册为滑动条事件的监听器。当滑动条滑动的时候,该应用程序就会更新用于显示曲线的面板和用于显示tpeak值的标签。

        
 

习题1:请完成ShowBallistics类的slider()方法和stateChanged()方法,该绘图面板和tpeak标签能够根据滑动条值的改变而显示不同的曲线和数据。

 

public JSlider slider() 

{ if(slider == null) 

{ slider = new JSlider(); 

sliderMax = slider.getMaximum(); 

sliderMin = slider.getMinimum();

 slider.addChangeListener(this); 

slider.setValue(slider.getMinimum());

 }

 return slider; 

} 



public void stateChanged(ChangeEvent e) 

{ double val = slider.getValue();

 double tp = (val - sliderMin)/(sliderMax - sliderMin);

 burnPanel().setTPeak(tp); 

thrustPanel().setTPeak(tp);

 valueLabel().setText(Format.formatToNPlace(N,2); 

} 

 
  

ShowBallistics类根据滑动条的值更新燃烧速率面板、推进力面板以及显示tpeak值的标签。这种设计方式很常见,虽然它不是很糟糕,但值得注意的是,它与Observer模式的意图完全相悖!Java Swing架构采用Observer模式,以便滑动条无需了解那些用户关注自己。但是ShowBallistics使我们重新面临这种本希望避免的状况:将单个依赖滑动条组件的对象---即它自身--注册为滑动条事件的监听器,在得到滑动条事件通知之后,该对象又将事件分发给各个相关的对象。在这种设计方式中,该对象必须清楚哪些对象依赖于滑动条组件,而这些依赖滑动条组件的对象并没有注册自己以监听滑动条事件。

     为了与Observer模式的意图保持一致,我们可以对上面的代码进行一下改动,从而让关注滑动条变化的组件直接注册自己以监听滑动条事件。这种新的设计的类图如下:

在新的设计中,我们可以将addChangeListener()方法的调用从slider()方法中移出来,移到各个依赖滑动条的组件的构造器中:

 

public BallisticsPanel2(BallisticsFunction func,JSlider slider)
{
     this.func = func;
     this.slider = slider;
     slider.addChangeListener(this);
}

   每当滑动条滑动BallisticsPanel2类对象便会得到通知,然后标签会重新计算并显示tpeak值:

  • 大小: 6.1 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    设计模式之观察者模式(Observer Pattern)

    在"ObserverPattern(简单实现)1.rar"中,我们可以看到一个简单的观察者模式实现。主题类(Subject)通常包含一个添加、删除和通知观察者的接口。当主题状态改变时,它会调用`notifyObservers()`方法,将变化通知给...

    (行为型模式) Observer 观察者模式

    C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载

    Observer 观察者模式 示例 源码 ----设计模式

    观察者模式 概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...

    observer观察者模式

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在软件工程中,这常用于实现事件驱动编程,使得系统能够及时响应变化。 在...

    Observer观察者模式

    Observer观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这个模式的核心概念是发布-订阅,即发布者(被观察对象)向订阅者(观察者)广播事件或...

    设计模式之略见一斑(Observer观察者模式)

    本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

    android Observer(观察者模式)_案例祥解.pdf

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得一个对象的状态发生变化时,所有依赖它的对象都能收到通知。 二、观察者模式的组件 1. 抽象观察者(Watcher) 抽象观察者是一个接口,定义...

    设计模式之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...

    观察者模式Observer

    观察者模式(Observer)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在软件开发中广泛应用于事件处理和实时...

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中扮演着重要角色,尤其是在事件驱动编程和发布/订阅系统中。...

    观察者模式,Observer

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中广泛应用于事件驱动编程,例如用户界面组件的交互或者系统状态的...

    [行为模式]head first 设计模式之观察者模式(observer)

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...

    观察者(Observer)模式

    观察者模式的核心概念是主体(Subject)和观察者(Observer)。主体是被观察的对象,它维护了一个观察者列表,并提供了添加、删除观察者以及通知所有观察者的接口。观察者关注主体的状态变化,并在主体状态改变时...

Global site tag (gtag.js) - Google Analytics