mcpField
D
design-patterns

design-patterns

github.com/ratacat开发58134 次安装39 周前更新
代码仓库

关于 design-patterns

面向开发者的设计模式参考技能,帮助选择并应用成熟模式。按问题和代码症状组织内容,并强调结合实际场景使用,而非照搬模板。

主要功能

  1. 01按问题和症状选择模式
  2. 02基础设计原则
  3. 03常见类别的模式参考
  4. 04反模式与误用指导
  5. 05实现检查清单

适用场景

  1. 01为反复出现的设计问题选择模式
  2. 02根据代码症状识别适用模式
  3. 03检查设计是否存在过度工程化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ratacat/claude-skills --skill design-patterns

安装后在 Claude Code 中输入/design-patterns确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

patterns/
adapter.md
builder.md
chain-of-responsibility.md
command.md
composite.md
decorator.md
dto.md
facade.md
factory.md
identity-map.md
lazy-load.md
mediator.md
observer.md
proxy.md
repository.md
service-layer.md
state.md
strategy.md
template-method.md
unit-of-work.md

详细介绍

设计模式

概览

设计模式是针对反复出现的软件设计问题而经过验证的解决方案。它们提供了一套用于讨论设计的通用词汇,并汇集了数十年来在实际应用中不断打磨的集体智慧。

核心理念: 模式是需要根据具体情境调整的模板,而不是照搬的蓝图。只有在确实能简化设计时才使用合适的模式,而不是为了炫技或过度设计。

基础原则

这些原则是所有优秀设计的基石:

原则含义违反原则的表现
封装变化点将变化的部分与稳定的部分隔离更改会波及整个代码库
面向接口编程依赖抽象,而非具体实现无法替换实现
组合优于继承通过组合对象来构建行为类层次结构过深且僵化
松耦合尽量减少对象之间的相互依赖改动一处就会导致另一处出问题
开闭原则对扩展开放,对修改关闭添加新功能时必须修改现有代码
单一职责每个类只有一个变更理由类承担的职责过多
依赖倒置高层模块不依赖低层模块业务逻辑与基础设施耦合

模式选择指南

按问题类型
CREATING OBJECTS
├── Complex/conditional creation ──────────→ Factory Method
├── Families of related objects ───────────→ Abstract Factory
├── Step-by-step construction ─────────────→ Builder
├── Clone existing objects ────────────────→ Prototype
└── Single instance needed ────────────────→ Singleton (use sparingly!)

STRUCTURING/COMPOSING OBJECTS
├── Incompatible interface ────────────────→ Adapter
├── Simplify complex subsystem ────────────→ Facade
├── Tree/hierarchy structure ──────────────→ Composite
├── Add behavior dynamically ──────────────→ Decorator
└── Control access to object ──────────────→ Proxy

MANAGING COMMUNICATION/BEHAVIOR
├── One-to-many notification ──────────────→ Observer
├── Encapsulate requests as objects ───────→ Command
├── Behavior varies by internal state ─────→ State
├── Swap algorithms at runtime ────────────→ Strategy
├── Algorithm skeleton with hooks ─────────→ Template Method
├── Reduce N-to-N communication ───────────→ Mediator
└── Sequential handlers ───────────────────→ Chain of Responsibility

MANAGING DATA ACCESS
├── Abstract data source ──────────────────→ Repository
├── Track changes for atomic commit ───────→ Unit of Work
├── Ensure object identity ────────────────→ Identity Map
├── Defer expensive loading ───────────────→ Lazy Load
├── Map objects to database ───────────────→ Data Mapper
└── Shape data for transfer ───────────────→ DTO
按症状
症状可考虑
基于类型的巨大 switch/if-elseStrategy、State 或多态
类之间存在重复代码Template Method、Strategy
需要通知许多对象发生的变更Observer
对象创建逻辑复杂Factory、Builder
添加功能导致类臃肿Decorator
第三方 API 与代码不兼容Adapter
组件之间存在过多依赖Mediator、Facade
没有数据库或网络就无法测试Repository、Dependency Injection
需要撤销/重做Command
对象行为取决于状态State
请求需要由多个处理程序处理Chain of Responsibility
领域逻辑:Transaction Script 与 Domain Model
因素Transaction ScriptDomain Model
逻辑复杂度简单(< 500 行)复杂,规则众多
业务规则较少且直观众多且相互作用
操作以 CRUD 为主行为丰富
团队/时间线小团队,快速交付长期维护
测试集成测试针对领域的单元测试

经验法则: 从 Transaction Script 开始。当过程式代码变得难以维护时,再重构为 Domain Model。

快速参考

第 1 级:必备模式(优先掌握)
模式一句话说明适用场景参考
Strategy封装可互换的算法同一任务有多种实现方式,且需要在运行时切换strategy.md
Observer在状态变化时通知依赖方事件系统、响应式更新observer.md
Factory封装对象创建复杂或有条件的实例化factory.md
Decorator动态添加行为无需继承即可扩展decorator.md
Command将请求封装为对象撤销/重做、排队、日志记录command.md
第 2 层:结构型模式
模式一句话说明适用场景参考
Adapter转换接口集成不兼容的代码adapter.md
Facade简化复杂子系统通过简单 API 隐藏复杂性facade.md
Composite统一树形结构整体—部分层次结构composite.md
Proxy控制对对象的访问延迟加载、访问控制、缓存proxy.md
第 3 层:企业级/架构模式
模式一句话说明适用场景参考
Repository类集合式的数据访问解耦领域层与数据层repository.md
Unit of Work协调原子性变更事务管理unit-of-work.md
Service Layer编排业务操作定义应用边界service-layer.md
DTO定义传输数据的结构API 契约、防止过度暴露dto.md
其他重要模式
模式一句话说明适用场景参考
Builder分步骤构建对象复杂对象、流式 APIbuilder.md
State行为随状态变化状态机、工作流state.md
Template Method带钩子的算法骨架框架扩展点template-method.md
Chain of Responsibility沿处理器传递请求中间件、管道chain-of-responsibility.md
Mediator集中处理复杂通信降低组件耦合mediator.md
Lazy Load延迟执行开销较大的加载性能、大型对象图lazy-load.md
Identity Map确保对象标识唯一ORM、防止重复identity-map.md

常见错误

错误表现修正方法
过度使用模式简单操作也需要在许多类之间辗转仅在解决实际问题时使用
模式错误代码显得生硬、别扭重新审视实际问题
滥用继承层次结构过深、基类脆弱优先使用组合(Strategy、Decorator)
滥用 Singleton全局状态、隐藏依赖、难以测试改用依赖注入
过早抽象接口只有一个实现等到确有变化需求时再抽象

需要识别的反模式

  • 上帝对象: 一个类包办所有事情 → 按 SRP 拆分
  • 贫血领域模型: 对象只是数据包 → 将行为移到对象中
  • 金锤: 到处使用同一种模式 → 根据问题选择模式
  • 熔岩流: 无人清理的死代码 → 删除它,版本控制系统会为你兜底

现代变体

现代模式基于描述
Dependency InjectionStrategy + Factory容器创建并注入依赖
MiddlewareDecorator + Chain of Responsibility请求/响应管道
Event SourcingCommand将状态变更存储为事件
CQRSCommand/Query 分离分离读写模型
Hooks (React/Vue)Observer + Strategy函数式生命周期订阅

实现检查清单

实现模式之前:

  • 该模式能解决此代码库中的实际问题
  • 已考虑更简单的替代方案
  • 权衡取舍适合当前场景
  • 团队理解该模式
  • 不会过度设计解决方案

评论

支持 Markdown