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

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日

相关文章

  • 如何在CentOS8上安装和配置Postfix邮件服务器的方法示例

    下面是如何在CentOS 8上安装和配置Postfix邮件服务器的方法示例: 安装Postfix 在CentOS 8上安装Postfix非常简单,只需要运行以下命令即可: sudo dnf install postfix 配置Postfix 安装完Postfix后,需要进行一些配置才能使其正常工作。下面是一个基本的Postfix配置示例: 修改主机名称 在/…

    other 2023年6月27日
    00
  • java+selenium自动化测试学习(一)

    以下是关于“Java+Selenium自动化测试学习(一)”的完整攻略,包括基本概念、步骤和两个示例。 基本概念 Selenium是一种自动化测试工具,可以用于Web应用程序的功能和用户界面。Selenium支持多种编程语言,包括Java、Python、C#等。Java是一种广泛使用的编程语言,也是Selenium最常用的编程语言之一。在使用Java和Sel…

    other 2023年5月7日
    00
  • 帝国CMS灵动标签PHP代码实现标签无限嵌套的效果

    帝国CMS灵动标签PHP代码实现标签无限嵌套的效果攻略 帝国CMS是一款常用的内容管理系统,通过使用灵动标签和PHP代码,可以实现标签的无限嵌套效果。下面是实现该效果的完整攻略: 步骤一:创建标签模板 首先,我们需要创建一个标签模板,用于定义标签的样式和嵌套规则。可以在帝国CMS的后台管理界面中创建一个新的标签模板,或者直接在模板文件中添加以下代码: &lt…

    other 2023年7月28日
    00
  • win7开机自动诊断修复无法进入系统重启无效的故障解决

    问题背景 在使用Windows 7电脑时,有时会遇到开机自动诊断修复无法进入系统重启无效的故障。这种情况下,电脑无法进入Windows系统,用户需要采取一些措施来解决这个问题。 解决方案 步骤一:重启电脑进入自动诊断修复模式 首先,需要重启电脑并进入自动诊断修复模式。具体的步骤如下: 在开机过程中按下F8键,进入启动选项菜单。 在启动选项菜单中选择“修复你的…

    other 2023年6月27日
    00
  • ASP.Net页面生命周期与Page_Load方法的工作原理介绍

    ASP.NET页面生命周期指的是一个ASP.NET页面从初始请求直到返回响应的整个过程,其中包括了页面的初始化、页面的加载、页面的验证、页面的事件处理以及页面的重绘等一系列的过程。 ASP.NET页面生命周期的完整流程如下: 1.页面请求:客户端发送一个get或post请求到服务器。 2.首次执行:如果这是页面的第一次请求,则ASP.NET创建一个新的页面对…

    other 2023年6月27日
    00
  • C++11新特性std::make_tuple的使用

    C++11引入了许多新的语言特性和标准库,其中一个非常有用的新特性是std::make_tuple。本篇攻略将详细介绍std::make_tuple的使用方法,以及它可以如何帮助我们编写更加清晰而且易维护的代码。 什么是std::make_tuple? std::make_tuple是一个模板函数,它接受任意数量的参数,并将它们打包成一个std::tuple…

    other 2023年6月26日
    00
  • 微软正式发布Windows 10 2020年5月更新(附官方下载地址)

    微软正式发布Windows 10 2020年5月更新攻略 介绍 微软于2020年5月发布了Windows 10的更新版本。这个更新带来了一些新功能和改进,同时修复了一些已知的问题。本攻略将详细介绍如何获取和安装这个更新。 步骤 步骤一:检查系统要求 在开始之前,请确保你的计算机符合以下系统要求:- 操作系统:Windows 10- 处理器:1 GHz或更快的…

    other 2023年8月4日
    00
  • vs2015怎么创建控制台应用程序?

    创建控制台应用程序是Visual Studio 2015的一个常用功能,可以用于开发和调试一些简单的命令行程序、小工具等。 以下是创建控制台应用程序的完整攻略: 步骤一:打开Visual Studio 2015,点击“文件”菜单,选择“新建” > “项目”。 步骤二:在弹出的“新建项目”对话框中,选择“Visual C++”类别,然后选择“控制台应用程…

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