关于 gof-patterns
gof-patterns 是 Gang of Four 设计模式的语言无关参考技能,面向需要选择、理解或实现模式的软件开发者。它通过分类表、适用场景和伪代码帮助将模式思路转化为不同语言的实现。
主要功能
- 01涵盖创建型、结构型和行为型模式
- 02提供模式选择参考
- 03说明各模式的适用场景
- 04提供可移植到多种语言的伪代码
适用场景
- 01为设计问题挑选合适模式
- 02重构时评估结构改进方案
- 03将模式示例转换为项目使用的语言
MCP 相关
输入未说明该技能与 MCP 的关系。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ grndlvl/ software-patterns --skill gof-patterns安装后在 Claude Code 中输入/gof-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
pattern-selection.mdgof-behavioral/chain-of-responsibility.mdcommand.mdinterpreter.mditerator.mdmediator.mdmemento.mdobserver.mdstate.mdstrategy.mdtemplate-method.mdvisitor.mdgof-creational/abstract-factory.mdbuilder.mdfactory-method.mdprototype.mdsingleton.mdgof-structural/adapter.mdbridge.mdcomposite.mddecorator.mdfacade.mdflyweight.mdproxy.md详细介绍
GoF 设计模式参考
Gang of Four 设计模式的全面参考。本技能提供与语言无关的指导,并附有可转换为任何编程语言的伪代码示例。
本技能的触发条件
在以下情况下,本技能会自动触发:
- 询问或需要实现设计模式
- 需要为设计问题选择模式
- 重构代码并考虑结构改进
- 讨论架构、解耦或可扩展性
- 提及特定模式:工厂、单例、观察者、装饰器等
模式速查
创建型模式(对象创建)
| 模式 | 意图 | 适用场景 |
|---|---|---|
| 抽象工厂 | 创建相关对象的系列 | 需要平台/主题无关性 |
| 生成器 | 逐步构建复杂对象 | 对象有许多可选部分 |
| 工厂方法 | 让子类决定实例化哪个类 | 事先不知道具体类型 |
| 原型 | 克隆现有对象 | 创建对象的开销很大 |
| 单例 | 确保只有一个实例 | 需要且仅需要一个共享实例 |
结构型模式(组合)
| 模式 | 意图 | 适用场景 |
|---|---|---|
| 适配器 | 将接口转换为预期的接口 | 集成不兼容的接口 |
| 桥接 | 将抽象与实现分离 | 需要让两者独立变化 |
| 组合 | 以统一方式处理单个对象和对象组 | 有树形结构 |
| 装饰器 | 动态添加职责 | 需要灵活扩展 |
| 外观 | 为子系统提供简化接口 | 复杂子系统需要简单的 API |
| 享元 | 高效共享公共状态 | 需要许多相似对象 |
| 代理 | 控制对对象的访问 | 需要延迟加载、访问控制或日志记录 |
行为型模式(通信)
| 模式 | 意图 | 适用场景 |
|---|---|---|
| 责任链 | 沿处理器链传递请求 | 有多个处理器,但不确定由哪个处理 |
| 命令 | 将请求封装为对象 | 需要撤销、排队或记录操作 |
| 解释器 | 定义语法并解释句子 | 有简单语言需要解析 |
| 迭代器 | 不暴露内部结构地按顺序访问 | 需要遍历集合 |
| 中介者 | 集中处理复杂通信 | 许多对象以复杂方式相互通信 |
| 备忘录 | 捕获并恢复对象状态 | 需要撤销/快照功能 |
| 观察者 | 在状态变化时通知依赖对象 | 一对多依赖关系 |
| 状态 | 在状态变化时改变行为 | 对象行为取决于状态 |
| 策略 | 封装可互换的算法 | 需要在运行时切换算法 |
| 模板方法 | 定义骨架,由子类填充具体内容 | 算法结构固定,但步骤有所变化 |
| 访问者 | 无需更改类即可添加操作 | 需要为稳定结构添加许多操作 |
决策指南
请参阅模式选择指南,了解如何选择合适的模式。
如何使用本参考
- 选择模式:从上方的决策指南或表格开始
- 学习模式:阅读包含示例的完整文档
- 快速查阅:使用上方的表格快速参考
- 实现:遵循伪代码,并根据你的语言进行调整
语言转换说明
本参考中的伪代码采用以下约定:
class用于类型定义function用于方法/函数->用于调用对象的方法//用于注释- 类型提示写作
name: Type
转换为你的语言:
- PHP:
class、function、->、//,在文档块或 PHP 8+ 中使用类型提示 - JavaScript/TypeScript:
class、function/箭头函数、.、//、TS 类型 - Python:
class、def、.、#、类型提示 - Java/C#:使用
new、泛型直接映射
基于 Gamma、Helm、Johnson 和 Vlissides(Gang of Four)于 1994 年所著的《设计模式:可复用面向对象软件的基础》中的概念。
评论
支持 Markdown