Java设计模式开发中使用观察者模式的实例教程

yizhihongxing

Java设计模式开发中使用观察者模式的实例教程

观察者模式是一种行为型设计模式,它允许对象之间建立一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。在Java设计模式开发中,观察者模式被广泛应用于事件驱动系统、GUI开发和消息通知等场景。

实现观察者模式的基本步骤

  1. 定义主题接口(Subject):主题是被观察的对象,它需要提供注册观察者、移除观察者和通知观察者的方法。
  2. 实现具体主题类(ConcreteSubject):具体主题类实现主题接口,维护一个观察者列表,并在状态发生变化时通知观察者。
  3. 定义观察者接口(Observer):观察者是接收主题通知的对象,它需要提供更新方法。
  4. 实现具体观察者类(ConcreteObserver):具体观察者类实现观察者接口,当接收到主题通知时执行相应的更新操作。

示例1:气象站

假设我们正在开发一个气象站应用程序,需要实时显示当前的温度、湿度和气压。我们可以使用观察者模式来实现这个功能。

首先,我们定义主题接口(Subject):

public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

然后,实现具体主题类(WeatherStation):

import java.util.ArrayList;
import java.util.List;

public class WeatherStation implements Subject {
    private List<Observer> observers;
    private float temperature;
    private float humidity;
    private float pressure;

    public WeatherStation() {
        observers = new ArrayList<>();
    }

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(temperature, humidity, pressure);
        }
    }

    public void setMeasurements(float temperature, float humidity, float pressure) {
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;
        notifyObservers();
    }
}

接下来,定义观察者接口(Observer):

public interface Observer {
    void update(float temperature, float humidity, float pressure);
}

最后,实现具体观察者类(Display):

public class Display implements Observer {
    private float temperature;
    private float humidity;
    private float pressure;

    public void update(float temperature, float humidity, float pressure) {
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;
        display();
    }

    public void display() {
        System.out.println(\"Current conditions: \" + temperature + \"F degrees, \" + humidity + \"% humidity, \" + pressure + \" pressure\");
    }
}

现在,我们可以使用观察者模式来创建一个气象站应用程序:

public class WeatherApp {
    public static void main(String[] args) {
        WeatherStation weatherStation = new WeatherStation();
        Display display = new Display();

        weatherStation.registerObserver(display);

        // 模拟气象数据更新
        weatherStation.setMeasurements(75, 60, 30.4f);
    }
}

运行上述代码,输出结果为:

Current conditions: 75.0F degrees, 60.0% humidity, 30.4 pressure

示例2:股票市场

假设我们正在开发一个股票市场监控系统,需要实时监测股票价格的变化并通知相关的观察者。我们可以使用观察者模式来实现这个功能。

首先,定义主题接口(Subject)和观察者接口(Observer)与示例1中相同。

然后,实现具体主题类(StockMarket):

import java.util.ArrayList;
import java.util.List;

public class StockMarket implements Subject {
    private List<Observer> observers;
    private String stockName;
    private double price;

    public StockMarket() {
        observers = new ArrayList<>();
    }

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(stockName, price);
        }
    }

    public void setStockPrice(String stockName, double price) {
        this.stockName = stockName;
        this.price = price;
        notifyObservers();
    }
}

接下来,实现具体观察者类(Investor):

public class Investor implements Observer {
    private String name;

    public Investor(String name) {
        this.name = name;
    }

    public void update(String stockName, double price) {
        System.out.println(name + \" received update: \" + stockName + \" price is \" + price);
    }
}

最后,我们可以使用观察者模式来创建一个股票市场监控系统:

public class StockMarketApp {
    public static void main(String[] args) {
        StockMarket stockMarket = new StockMarket();
        Investor investor1 = new Investor(\"John\");
        Investor investor2 = new Investor(\"Alice\");

        stockMarket.registerObserver(investor1);
        stockMarket.registerObserver(investor2);

        // 模拟股票价格变化
        stockMarket.setStockPrice(\"AAPL\", 150.0);
    }
}

运行上述代码,输出结果为:

John received update: AAPL price is 150.0
Alice received update: AAPL price is 150.0

通过以上两个示例,我们可以看到观察者模式的应用。它可以帮助我们实现对象之间的松耦合,使得主题和观察者可以独立变化,同时也提供了一种简单的方式来实现事件驱动的系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java设计模式开发中使用观察者模式的实例教程 - Python技术站

(0)
上一篇 2023年7月27日
下一篇 2023年7月27日

相关文章

  • 比特币开发者有多少比特币?比特币开发者有的比特币数量分析

    比特币开发者有多少比特币? 比特币开发中有许多开发者和贡献者,但其具体持有的比特币数量并没有公开透明的渠道。然而,可以通过一些间接的方式来推测比特币开发者持有的比特币数量。 比特币发起人中本聪 比特币的发起人中本聪一直以匿名身份存在,因此也无法确定他到底持有多少比特币。根据比特币系统设计,中本聪自己挖掘的前50个区块将分配给自己,这意味着他可能拥有大约100…

    other 2023年6月28日
    00
  • 详解 objective-c中interface与protocol的作用

    来讲解一下“详解 Objective-C 中 interface 与 protocol 的作用”的完整攻略。 什么是 interface 和 protocol? 在 Objective-C 中,interface 和 protocol 都是用来定义类之间的接口虚构,使得对象之间可以进行通信。不同的是,interface 定义了一个类,而 protocol 只…

    other 2023年6月26日
    00
  • javascript获取当前ip的代码

    获取当前 IP 地址是一个常见的需求,可以通过 JavaScript 来实现。下面是一种常用的方法来获取当前 IP 地址的代码: // 使用异步请求获取 IP 地址 function getIPAddress() { return new Promise((resolve, reject) => { const xhr = new XMLHttpReq…

    other 2023年7月31日
    00
  • Python GUI和游戏开发从入门到实践

    Python GUI和游戏开发从入门到实践攻略 介绍 Python是一种功能强大且易于学习的编程语言,广泛应用于GUI(图形用户界面)和游戏开发。本攻略将带您从入门到实践,掌握Python GUI和游戏开发的基本知识和技巧。 步骤 1. 学习Python基础知识 在开始GUI和游戏开发之前,您需要掌握Python的基础知识。这包括变量、数据类型、条件语句、循…

    other 2023年7月27日
    00
  • Firefox 48.0.2正式版发布下载 修复启动崩溃问题(附下载地址)

    Firefox 48.0.2正式版发布下载 修复启动崩溃问题(附下载地址)攻略 简介 Firefox 48.0.2正式版是一款流行的网络浏览器,它提供了快速、安全和可定制的上网体验。此版本修复了启动崩溃问题,为用户提供更加稳定的使用环境。 下载地址 你可以从以下地址下载Firefox 48.0.2正式版:官方下载地址 攻略步骤 步骤一:访问官方网站 首先,打…

    other 2023年8月4日
    00
  • mactree命令

    当然,我很乐意为您提供有关“mactree命令”的完整攻略。以下是详细的步骤和两个示例: 1 mactree命令 mactree命令是一种用于显示Mac OS X系统中进程之间关系的命令。它可以显示进程之间的父子关系,以及进程之间的其他关系。以下是使用mactree命令的详细步骤: 1.1 安装mactree 在使用mactree命令之前,您需要安装mact…

    other 2023年5月6日
    00
  • 一款js和css代码压缩工具[附JAVA环境配置方法]

    一款JS和CSS代码压缩工具攻略 本攻略将详细介绍一款用于压缩JS和CSS代码的工具,并提供JAVA环境配置方法。以下是完整的攻略过程: 1. 工具介绍 该工具是一款用于压缩JS和CSS代码的工具,可以帮助开发者减小文件体积,提高网页加载速度。它使用JAVA语言编写,支持跨平台运行。 2. JAVA环境配置 为了运行该工具,您需要先配置JAVA环境。请按照以…

    other 2023年8月8日
    00
  • Android Studio中ButterKnife插件的安装与使用详解

    Android Studio中ButterKnife插件的安装与使用详解 1. 安装ButterKnife插件 在Android Studio中安装ButterKnife插件可以简化视图绑定的过程。按照以下步骤进行安装: 打开Android Studio,点击菜单栏的\”File\”(文件)选项。 选择\”Settings\”(设置)选项,然后在弹出的窗口中…

    other 2023年8月21日
    00
合作推广
合作推广
分享本页
返回顶部