`
wangpx
  • 浏览: 203197 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

观察者模式(读书笔记)

 
阅读更多

观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状态时,他的所有依赖着都会收到通知改变状态。
观察者模式 有点类似 打草惊蛇,一石双鸟。对主题进行扩展,不会影响观察者,添加观察者也业不会影响主题。

1.观察者模式定义了对象之间一对多的关系。
2。主题(也就是可观察者)用一个共同的接口来更新观察者
3。观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口。
4 。使用此模式时,你可以被观察者处推或者拉数据。然而推的方式被认为更正确。
5。有多个观察者时,不可以依赖特定的通知次序。
6。java 有多种观察者模式的实现,包括了通用的java。util。Observable
7。要注意java。util。Observable 实现上所带来的问题。
8。如果有必要的话,可以实现自己的Observable,这并不难。
9。Swing大量使用观察者模式。许多GUI框架也是如此
10。此模式也被应用在许多地方

package pattern;
import java.util.ArrayList;
public class WeatherStation {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(
weatherData);
ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData);
weatherData.setMeasurements(80, 65, 30.4f);
}
}
interface Observer {
public void update(float temp, float humidity, float pressure);
}
interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
interface DisplayElement {
public void display();
}
class WeatherData implements Subject {
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData() {
observers = new ArrayList();
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
public void notifyObservers() {
for (int i = 0; i < observers.size(); i++) {
Observer observer = (Observer) observers.get(i);
observer.update(temperature, humidity, pressure);
}
}
public void measurementsChanged() {
this.notifyObservers();
}
public void setMeasurements(float temperature, float humidity,
float pressure) {
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
this.measurementsChanged();
}
}
class CurrentConditionsDisplay implements Observer, DisplayElement {
private float temperature;
private float humidity;
private Subject weatherData;
public CurrentConditionsDisplay(Subject weatherData) {
this.weatherData = weatherData;
weatherData.registerObserver(this);
}
public void update(float temperature, float humidity, float pressure) {
this.temperature = temperature;
this.humidity = humidity;
this.display();
}
public void display() {
System.out.println("Current conditions:" + temperature
+ "F degrees and" + humidity + "%humidity");
}
}
class ForecastDisplay implements Observer, DisplayElement {
private float currentPressure = 29.92f;
private float lastPressure;
private Subject weatherData;
public ForecastDisplay(Subject weatherData) {
this.weatherData = weatherData;
weatherData.registerObserver(this);
}
public void update(float temperature, float humidity, float pressure) {
this.currentPressure = pressure;
this.display();
}
public void display() {
System.out.println("Current conditions:" + currentPressure);
}
}





package pattern;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SwingOberverExample {
JFrame frame;
public static void main(String[] args){
SwingOberverExample example =new SwingOberverExample();
example.go();
}
public void go(){
frame=new JFrame();
JButton button=new JButton("Shoule I do it?");
button.addActionListener(new AngelListener());
button.addActionListener(new DevilListener());
frame.getContentPane().add(BorderLayout.CENTER,button);
}
}
class AngelListener implements ActionListener{
public void actionPerformed(ActionEvent event){
System.out.println("Don't do it,you might regret it!");
}
}
class DevilListener implements ActionListener{
public void actionPerformed(ActionEvent event){
System.out.println("Come on,do it!");
}
}

 

  • 大小: 55 KB
分享到:
评论

相关推荐

    设计模式-观察者模式(读书笔记)

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

    设计模式读书笔记

    行为型模式专注于类或对象间的交互和职责分配,如模板方法、命令、解释器、责任链、访问者、中介者、备忘录、观察者、状态和策略模式,它们定义了对象如何协作和执行任务。 状态机模式,也称为状态对象模式,是一种...

    设计模式Golang实现《研磨设计模式》读书笔记.zip

    设计模式Golang实现《研磨设计模式》读书笔记Go语言设计模式Go语言设计模式的实例代码创建模式工厂简单模式(Simple Factory)工厂方法模式(工厂方法)抽象工厂模式(Abstract Factory)创建者模式(Builder)原型...

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    JAVA与模式读书笔记。

    观察者模式是一种事件驱动的设计模式,使得一个对象能够通知其他对象它已经发生了变化。 5. **Java源码中的设计模式应用** 在Java标准库和其他著名开源框架如Spring、Hibernate中,设计模式的应用非常广泛。例如,...

    设计模式的读书总结笔记

    3. 行为型模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、访问者模式(Visitor)、责任链模式(Chain of Responsibility)、命令模式(Command...

    设计模式教程及笔记

    行为型模式则关注对象之间的交互和责任分配,如策略模式、模板方法模式、观察者模式、访问者模式、命令模式、迭代器模式、职责链模式、解释器模式和备忘录模式等。 C++作为一种静态类型、编译式、面向对象的语言,...

    台湾人写的设计模式笔记

    Java的`java.util.Observer`和`java.util.Observable`类是观察者模式的标准实现。 通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式...

    C++读书笔记

    12. **设计模式**:在C++中,了解和应用设计模式(如工厂模式、单例模式、观察者模式等)可以帮助开发者写出高效、可维护的代码。 以上是C++编程的一些核心概念,但实际的读书笔记可能会包含更多细节,如特定的编程...

    Head First设计模式读书笔记-DesignPatterns.zip

    3. **观察者模式**:行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在事件驱动编程中,如GUI组件间的交互,广泛使用此模式。 4. **...

    《Hear First设计模式》阅读笔记

    第四章和第五章可能涉及了行为型模式,如策略模式、模板方法模式、观察者模式、命令模式、责任链模式、迭代器模式、访问者模式、备忘录模式、状态模式和解释器模式。这些模式主要关注对象之间的交互和职责分配。 第...

    Java游戏编程读书笔记

    9. **游戏设计模式**:作为编程的最佳实践,设计模式在游戏开发中扮演重要角色,如单例模式用于管理全局资源,工厂模式用于对象创建,观察者模式用于事件处理等。 10. **性能优化**:Java的垃圾回收机制虽然方便,...

    java设计模式源码和笔记(第一部分)

    3. **观察者模式**:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。`ObserverPattern.java`可能是实现这一模式的源码,笔记可能解释了事件监听和触发机制...

    JAVA面向对象编程(孙卫琴)读书笔记(三)

    - 设计模式是解决常见编程问题的经验总结,如工厂模式、单例模式、观察者模式等,它们是面向对象设计的精髓。 这篇读书笔记通过孙卫琴老师的视角,对上述知识点进行了详细解读和实例演示,有助于读者深入理解Java...

    设计模式笔记

    行为型设计模式则关注对象之间的职责分配和通信,比如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor)。 在《设计模式笔记》中,博主可能详细讲解了这些模式的概念、应用场景和实现方式。...

    Uml和模式应用 配套视频笔记2

    设计模式是解决常见设计问题的经验总结,如工厂模式、单例模式、观察者模式等。它们为解决特定问题提供了一种标准的、可重用的解决方案。 6. **迭代开发中的模式应用**:在迭代1中,可能会讨论如何选择合适的设计...

    java 设计模式自学的笔记的

    17. **观察者模式**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 18. **职责链模式**:避免请求的发送者与接收者之间的耦合,将多个处理者对象...

    Java入门学习笔记

    设计模式是解决常见编程问题的模板,如单例模式、工厂模式和观察者模式。最后,笔记可能会介绍Java标准库的一些重要部分,如JDBC(Java数据库连接)用于数据库操作,或者Swing和JavaFX用于构建图形用户界面。 每道...

Global site tag (gtag.js) - Google Analytics