关于 design-patterns
面向 TypeScript 开发者的架构设计与审查参考技能,涵盖全部 22 种 Gang of Four 模式,并提供实用实现和选择指引。
主要功能
- 0122 种 Gang of Four 模式
- 02创建型、结构型与行为型分类
- 03模式选择指南
- 04SOLID 速查
- 05模式应用与误用建议
适用场景
- 01解耦紧密耦合的代码
- 02设计插件或扩展系统
- 03通过依赖注入提升可测试性
- 04审查代码合并请求中的架构选择
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ marcioaltoe/ skills --skill design-patterns安装后在 Claude Code 中输入/design-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/BEHAVIORAL.mdCREATIONAL.mdSTRUCTURAL.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