mcpField
D
design-patterns

design-patterns

github.com/marcioaltoe开发056 次安装今天更新
代码仓库

关于 design-patterns

面向 TypeScript 开发者的架构设计与审查参考技能,涵盖全部 22 种 Gang of Four 模式,并提供实用实现和选择指引。

主要功能

  1. 0122 种 Gang of Four 模式
  2. 02创建型、结构型与行为型分类
  3. 03模式选择指南
  4. 04SOLID 速查
  5. 05模式应用与误用建议

适用场景

  1. 01解耦紧密耦合的代码
  2. 02设计插件或扩展系统
  3. 03通过依赖注入提升可测试性
  4. 04审查代码合并请求中的架构选择

安装

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

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

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

包含的文件

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

agents/
openai.yaml
references/
BEHAVIORAL.md
CREATIONAL.md
STRUCTURAL.md

详细介绍

设计模式

经过验证的架构模式,可用于构建易于维护、可扩展且可测试的 TypeScript 代码库。包含全部 22 种 GoF 模式及其实用实现。

何时应用

在以下场景中参考这些模式:

  • 解决反复出现的架构问题
  • 重构紧耦合代码
  • 构建插件/扩展系统
  • 通过依赖注入提高代码的可测试性
  • 审查涉及架构问题的 PR
  • 在继承与组合之间做出选择

模式类别

创建型模式

灵活地创建对象,并向使用者隐藏创建逻辑。

模式意图
Factory Method将对象创建工作委托给子类
Abstract Factory创建相关对象组成的系列,而无需依赖具体类型
Builder逐步构建复杂对象
Prototype克隆现有对象,而不是从头开始构建
Singleton确保仅有一个实例,并提供全局访问方式

实现见 references/CREATIONAL.md。

结构型模式

将类和对象组合成更大、更灵活的结构。

模式意图
Adapter让不兼容的接口协同工作
Bridge将抽象与实现分离
Composite统一对待单个对象与对象组合
Decorator无需子类化即可动态附加职责
Facade通过统一接口简化复杂子系统
Flyweight共享常见状态,以减少大量对象占用的内存
Proxy通过替代对象控制对对象的访问

实现见 references/STRUCTURAL.md。

行为型模式

管理对象之间的算法、职责和通信。

模式意图
Chain of Responsibility沿处理程序链传递请求
Command将请求封装为对象,以便排队处理/撤销
Iterator遍历集合而不暴露其内部结构
Mediator集中管理对象之间复杂的通信
Memento捕获并恢复对象状态
Observer状态变化时自动通知依赖对象
State内部状态变化时改变行为
Strategy在运行时切换算法
Template Method定义算法骨架,并让子类重写其中的步骤
Visitor无需修改对象即可为其添加操作

实现见 references/BEHAVIORAL.md。

模式选择指南

问题模式
需要解耦对象创建Factory Method、Abstract Factory
包含许多可选字段的复杂对象Builder
对象创建成本高,需要复制Prototype
全局共享资源(配置、池)Singleton
不兼容的第三方接口Adapter
多个变化维度Bridge
树形结构(文件、UI、组织架构图)Composite
无需子类化即可添加功能Decorator
简化复杂的 API 表面Facade
数千个相似对象,内存开销大Flyweight
延迟加载、访问控制、缓存Proxy
灵活的请求处理流水线Chain of Responsibility
撤销/重做、任务队列、宏Command
自定义集合遍历Iterator
多对多对象通信Mediator
快照、保存/恢复状态Memento
事件系统、响应式更新Observer
对象行为取决于其状态State
可替换的算法(排序、压缩等)Strategy
步骤固定、部分可变的算法Template Method
对异构对象执行操作Visitor

最佳实践

应该做
  • 选择能解决你当前实际问题的模式
  • 优先使用组合,而非继承
  • 使用依赖注入来解耦组件
  • 保持模式实现简单——避免过度设计
  • 记录选择某个模式的原因(而不只是选择了哪个模式)
  • 选择模式时考虑可测试性
  • 适当组合模式(例如,Strategy + Factory)
不应该做
  • 为假设的未来需求提前应用模式
  • 在简单函数/对象就能满足需求时强行使用模式
  • 创建不必要的抽象层
  • 把 Singleton 当作伪装的全局变量使用
  • 组合更合适时仍选择继承
  • 忽视团队对模式的熟悉程度——所有人都了解的简单模式,胜过没人理解的“更好”模式

SOLID 速查

原则概要相关模式
Single Responsibility一个类,一个变更原因Strategy、Command、Observer
Open/Closed对扩展开放,对修改关闭Decorator、Strategy、Template Method
Liskov Substitution子类型必须能够替代基类型Factory Method、Abstract Factory
Interface Segregation优先使用小而专注的接口Adapter、Facade
Dependency Inversion依赖抽象,而非具体实现所有使用接口/抽象类的模式

评论

支持 Markdown