业务设计---针对天气预报变化时触发用户通知和推荐行程用什么设计模式

✅针对天气预报变化时触发用户通知和推荐行程用什么设计模式

当天气不同时,用户会收到不同的通知,通知中包括具体的天气和推荐的行程。

这里有两个点,一个是天气不同的时候发通知,还有一个就是不同的天气发送的内容不一样。

  • 天气变化是典型的事件驱动场景,需通知多个订阅方(如通知服务、推荐服务),观察者模式天然支持一对多依赖关系,实现低耦合的事件响应机制。

  • 不同天气对应不同的行程推荐策略(如晴天推荐户外活动、雨天推荐室内活动),策略模式通过封装可互换的业务逻辑实现逻辑灵活切换。

那么其实就是需要结合 观察者模式 和 策略模式两种设计模式。

观察者模式

  • Subject(被观察者):天气服务(WeatherService),负责监测天气变化,并管理观察者列表。

  • Observer(观察者):定义通知接口(如 sendNotification),由具体观察者实现。

    • NotificationService:向用户发送天气变化的通知。
    • RecommendationService:生成并推送推荐行程。
  1. 用户和行程服务订阅天气服务(注册为观察者)。
  2. 天气变化时,WeatherService 调用 notify(),遍历所有观察者。
  3. 每个观察者(如 NotificationService 和 RecommendationService)执行各自的更新逻辑。

策略模式

  • 策略接口:Strategy,定义生成推荐的方法(如 generateRec())。
  • 具体策略:针对不同天气实现推荐逻辑,如 SunnyDayStrategy、RainyDayStrategy。
java 复制代码
// 推荐服务 + 策略模式
class RecommendationService implements WeatherObserver {
    private RecommendationStrategy strategy;

    public void setStrategy(RecommendationStrategy strategy) {
        this.strategy = strategy;
    }

    @Override
    public void update(WeatherData data) {
        // 根据天气类型切换策略     
        switch (data.getType()) {
            case SUNNY:
                setStrategy(new SunnyStrategy());
                break;
            case RAINY:
                setStrategy(new RainyStrategy());
                break;
        }
        String rec = strategy.generateRecommendation(data);
        sendRecommendation(rec);
    }
}

// 策略接口与实现

interface RecommendationStrategy {
    String generateRecommendation(WeatherData data);
}

class SunnyStrategy implements RecommendationStrategy {
    @Override
    public String generateRecommendation(WeatherData data) {
        return "今日晴,推荐去公园野餐,紫外线指数:" + data.getUVIndex();
    }
}
相关推荐
编码者卢布2 小时前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
她说..4 小时前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
梦梦代码精5 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
李慕婉学姐6 小时前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
tb_first6 小时前
SSM速通2
java·javascript·后端
一路向北⁢6 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(一)
java·spring boot·后端·sse·通信
风象南6 小时前
JFR:Spring Boot 应用的性能诊断利器
java·spring boot·后端
爱吃山竹的大肚肚7 小时前
微服务间通过Feign传输文件,处理MultipartFile类型
java·spring boot·后端·spring cloud·微服务
毕设源码-邱学长9 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
咖啡啡不加糖9 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana