设计模式:当小米 14 遇上观察者模式

本文通过小米14Ultra新品发布的例子,详细介绍了观察者模式的工作原理,即当被观察者状态改变时,所有观察者会自动接收到通知并更新。在软件开发中,观察者模式有助于实现高效、可维护的代码设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

89128098de0e901e89cec398c4a255d5.png

观察者模式在软件设计的23种经典模式中相对较为直观和简单。它构建了一种机制,使得当某个对象的状态发生变化时,所有依赖这个对象的“观察者”都能自动得到通知并作出相应更新。

一、什么是观察者模式

观察者模式(或称为发布-订阅模式)允许多个对象(观察者)同时监听某个对象(被观察者)的状态。一旦被观察者的状态发生变化,所有注册的观察者都会自动收到通知,并据此更新自己的状态或执行相应的操作。

b3ffede4ca4ac83192f270138005ac35.png

二、举例说明:小米14Ultra的发布

以小米14Ultra的新品发布为例,最近即将发布了,它肯定是会在京东卖,在淘宝卖,以及其他电商平台,这样京东、淘宝等都会密切关注这一事件,并在第一时间更新自己的商品信息。我们可以使用观察者模式来模拟这一过程。

首先,我们定义一个观察者接口:

public interface Observer {  
    void update(String message);  
}

然后,我们定义被观察者(也就是主题),它有一个观察者列表,并且有一个方法来添加和移除观察者,还有一个方法用来通知所有观察者状态变化:

import java.util.ArrayList;  
import java.util.List;  
  
public class Subject {  
    private List<Observer> observers = new ArrayList<>();  
  
    public void attach(Observer observer) {  
        observers.add(observer);  
    }  
  
    public void detach(Observer observer) {  
        observers.remove(observer);  
    }  
  
    public void notifyObservers(String message) {  
        for (Observer observer : observers) {  
            observer.update(message);  
        }  
    }  
  
    // 当有重要事件发生时,调用此方法  
    public void notifyObservers() {  
        notifyObservers("小米14已经发布,快来购买吧!");  
    }  
}

6b3a2c11fc57d3804a4783d12436b0ef.png

现在,我们创建具体的观察者类,例如京东和淘宝:

public class JD implements Observer {  
    @Override  
    public void update(String message) {  
        System.out.println("京东平台收到消息:" + message);  
        // 京东平台自动更新小米14的商品信息  
    }  
}  
  
public class TaoBao implements Observer {  
    @Override  
    public void update(String message) {  
        System.out.println("淘宝平台收到消息:" + message);  
        // 淘宝平台自动更新小米14的商品信息  
    }  
}

最后,我们创建一个场景类来模拟小米14的发布,并且通知各个观察者:

public class Xiaomi14Release {  
    public static void main(String[] args) {  
        Subject subject = new Subject();  
        Observer jd = new JD();  
        Observer taobao = new TaoBao();  
  
        subject.attach(jd);  
        subject.attach(taobao);  
  
        // 小米14发布,通知所有观察者  
        subject.notifyObservers();  
  
        // 假设一段时间后,小米14有促销活动,再次通知所有观察者  
        subject.notifyObservers("小米14限时促销活动开始了!");  
  
        // 假设京东不再关注小米14的信息,可以取消订阅  
        subject.detach(jd);  
  
        // 再次通知,这次京东不会收到消息了  
        subject.notifyObservers("小米14最后清仓!");  
    }  
}

当运行上述代码时,可以看到控制台输出:

京东平台收到消息:小米14已经发布,快来购买吧!淘宝平台收到消息:小米14已经发布,快来购买吧!
京东平台收到消息:小米14限时促销活动开始了!
淘宝平台收到消息:小米14限时促销活动开始了!
淘宝平台收到消息:小米14最后清仓!

这个例子展示了观察者模式如何在小米14发布时,让各大电商平台自动获取通知并作出相应更新。当京东不再关注时,它就不会再收到任何更新消息了。

a865e2adb3c2bc499f0a61e0c55181e2.png

在软件开发领域,设计模式是解决常见问题的最佳实践。它们提供了一种标准化的方法,使得开发者能够高效地编写可维护、可扩展的代码。观察者模式就是其中的一种,它允许一个对象(被观察者)的状态变化时,自动通知所有依赖它的对象(观察者)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值