24种模式的独立 OOP 示例:GoF 23种,加上简单工厂。每种模式包含完整实现、独立 Demo 和行为测试。
在线文章导航:Java 25 设计模式学习指南 · OOP 与 Gradle 工程基础 · 选型与综合复盘
文章与代码独立维护。文章解释问题背景、对象职责、Mermaid 类图、常见用法、相近模式比较和练习;本仓库提供可以运行与修改的代码,不需要下载文章目录或其他项目。
- Java Toolchain、编译目标和示例运行环境:JDK 25。
- 构建工具:Gradle Wrapper 9.6.1,包含发行包 SHA-256 校验值。
- 包名前缀:
com.hanserwei.patterns。 - 测试:JUnit Jupiter 5.13.4,共24个测试类、49项行为测试。
- 规范:Google Java Style;所有显式声明的类、接口、枚举、字段、构造器、方法均有 Javadoc,测试代码同样检查。
- 运行示例无需外部服务、业务框架或预览特性。默认单线程、进程内内存场景,具体边界写在代码注释和对应文章中。
安装完整 JDK 25,使 JAVA_HOME 指向它,在本仓库根目录执行:
git clone https://github.com/Hanserwei/design-patterns-java25.git
cd design-patterns-java25
java -version
./gradlew --version
./gradlew clean check
./gradlew runAllWindows 使用 gradlew.bat 替换 ./gradlew。首次运行需要联网下载 Wrapper 发行包和依赖;不需要额外安装系统 Gradle。IDE 请打开本目录的 Gradle 项目,并将 Gradle JVM 设置为 JDK 25。
./gradlew -q javaToolchains
./gradlew tasks --group examples
./gradlew runStrategy
./gradlew test --tests 'com.hanserwei.patterns.strategy.PatternTest'策略示例输出1000和1200,表示600字分别按篇或按每字2分计费的结果。各示例的预期业务输出也记录在 pattern-catalog.json。
源码根目录为 src/main/java/com/hanserwei/patterns/,测试根目录为 src/test/java/com/hanserwei/patterns/。每个模式都有 Demo 和 PatternTest,包之间不依赖,顶级类型各占一个文件。表中的文章编号用于对应独立发布的系列。
| 文章编号 | 模式 | 源码与测试 | 运行任务 |
|---|---|---|---|
| 02 | 简单工厂 | 源码 · 测试 | runSimplefactory |
| 03 | 工厂方法 | 源码 · 测试 | runFactorymethod |
| 04 | 抽象工厂 | 源码 · 测试 | runAbstractfactory |
| 05 | 建造者 | 源码 · 测试 | runBuilder |
| 06 | 原型 | 源码 · 测试 | runPrototype |
| 07 | 单例 | 源码 · 测试 | runSingleton |
| 08 | 适配器 | 源码 · 测试 | runAdapter |
| 09 | 桥接 | 源码 · 测试 | runBridge |
| 10 | 组合 | 源码 · 测试 | runComposite |
| 11 | 装饰器 | 源码 · 测试 | runDecorator |
| 12 | 外观 | 源码 · 测试 | runFacade |
| 13 | 享元 | 源码 · 测试 | runFlyweight |
| 14 | 代理 | 源码 · 测试 | runProxy |
| 15 | 责任链 | 源码 · 测试 | runChain |
| 16 | 命令 | 源码 · 测试 | runCommand |
| 17 | 解释器 | 源码 · 测试 | runInterpreter |
| 18 | 迭代器 | 源码 · 测试 | runIterator |
| 19 | 中介者 | 源码 · 测试 | runMediator |
| 20 | 备忘录 | 源码 · 测试 | runMemento |
| 21 | 观察者 | 源码 · 测试 | runObserver |
| 22 | 状态 | 源码 · 测试 | runState |
| 23 | 策略 | 源码 · 测试 | runStrategy |
| 24 | 模板方法 | 源码 · 测试 | runTemplatemethod |
| 25 | 访问者 | 源码 · 测试 | runVisitor |
./gradlew formatJava
./gradlew check
./gradlew javadocformatJava 通过 google-java-format 1.34.1 格式化生产与测试代码。check 运行 JUnit、Google 格式一致性检查、Checkstyle 10.26.1 Google 配置,以及本项目更严格的 documentationCheck。检查中的任何警告也使构建失败。
注释检查覆盖私有成员、构造器、重写方法、getter、嵌套类与测试。Javadoc 应说明用途、输入约定、状态所有权或失败语义;字段注释应说明含义和单位。简单成员可写单行 Javadoc,复杂 API 可补充参数、返回值和异常标签。仅有注释并不证明说明正确,仍需人工阅读。
| 结果 | 本地路径 |
|---|---|
| 测试报告 | build/reports/tests/test/index.html |
| 生产代码规范报告 | build/reports/checkstyle/main.html |
| 测试代码规范报告 | build/reports/checkstyle/test.html |
| 全成员注释报告 | build/reports/checkstyle/documentationCheck.html |
| API 文档 | build/docs/javadoc/index.html |
本轮验证记录见 VALIDATION.md。验证原始记录放在 validation/,其中注释检查的负向探针使用临时工程,未向本仓库加入故意缺失注释的 Java 文件。
- 单独运行一种模式的 Demo,跟踪构造与调用关系。
- 阅读同包测试,先理解失败条件,再改变实现。
- 扩展一种产品、算法、状态或元素,保持不相关调用方稳定。
- 运行
./gradlew check,检查行为、格式和注释。
本例中的邮件发送、索引和存储均是内存模拟。缓存没有 TTL 或容量限制,观察者采用同步且失败即中断策略,命令历史要求顺序使用,状态迁移不提供跨线程或数据库原子性。这些是明确的学习范围,扩展时应增加相应契约与测试。
- Google Java Style Guide:代码规范原文。
- google-java-format:格式化工具及 JDK 模块访问要求。
- Gradle Java 兼容矩阵:JDK 与 Gradle 兼容关系。
- 第三方文件说明:固定版 Google Checkstyle 配置的来源。