跳到正文
Joeplover
学习笔记·2026-06-20·约 2 分钟阅读

观察者模式 + 工厂模式 + Java 整合

观察者模式核心思路、与策略模式对比、工厂模式三种形态、Python/Java 双语言实现。

设计模式

DAY02 — 观察者模式 + 工厂模式 + Java 整合

相关笔记:[[DAY01-成长计划启动]] | [[DAY01b-Python迷惑语法]] | [[DAY01c-策略模式]] | [[DAY01d-HTTP拦截与CookieSession]] 相关模式:[[设计模式]] 相关主题:[[Java笔记]] | [[Python基础]]

一、观察者模式

核心思路

传统写法:process_order() { 下单 + 发邮件 + 发短信 + 记日志 }
观察者:  process_order() { 下单 → 喊一声 }  ← 不知道谁在听

三个角色

角色例子
Subject(主题)OrderProcessor
Observer(接口)Protocol / 接口
Concrete ObserverEmailNotifier, SmsNotifier

和策略模式的区别

策略模式观察者模式
方向调用方选一个策略通知所有监听者
数量一次用一个一次通知全部
场景多个算法选一个多个地方想"知道"

二、工厂模式

一句话

把 new 对象这件事从各处收回来,统一交给一个地方管。

不用工厂的问题

# 到处都在 new
exporter = PdfExporter()  # 文件1
if fmt == "pdf": exporter = PdfExporter()  # 文件2
# 加新格式:上面每个地方都要改

工厂解法

class ExporterFactory:
    @staticmethod
    def create(fmt: str):
        if fmt == "pdf": return PdfExporter()
        if fmt == "csv": return CsvExporter()
        raise ValueError(f"不支持: {fmt}")

# 所有调用方统一用工厂
exporter = ExporterFactory.create("pdf")

三种工厂

模式一句话
简单工厂一个函数根据参数返回不同对象
工厂方法每个子类自己决定创建什么
抽象工厂生产一组相关对象

三、Python 补充

  • 切片 [::]:[start:stop:step],记成 range
  • 深浅拷贝:= 引用 → copy() 浅拷贝 → deepcopy() 全独立

四、Java 内容整合

  • 将 [[Java笔记]] 完整提取到学习记录
  • 覆盖 Day1~12 + Spring + ZooKeeper
  • 整理了 [[JAVA面试题]] 合并版

代码文件

  • Day01.code/observer_exercise.py
  • Day01.code/observer_pattern.py
  • Day01.code/factory_exercise.py

当天进度

阶段一:■■■□□□□□□□  3/10  (策略模式 ✅ 观察者模式 ✅ 工厂模式 ✅)