关于 design-patterns
面向开发者的设计模式参考技能,按创建型、结构型和行为型整理模式说明,并涵盖多种语言的实现、UML 指引及实际用途。还提供模式选择建议与实践原则。
主要功能
- 01按意图分类的模式目录
- 02涵盖 26 种设计模式
- 03多种语言实现参考
- 04UML 指引与实际用途
- 05模式选择建议与实践原则
适用场景
- 01为具体设计问题选择模式
- 02比较不同模式的适用场景
- 03参考模式实现和 UML
- 04评估模式是否增加不必要复杂度
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ krzysztofsurdy/ code-virtuoso --skill design-patterns安装后在 Claude Code 中输入/design-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/abstract-factory.mdadapter.mdbridge.mdbuilder.mdchain-of-responsibility.mdcommand.mdcomposite.mddecorator.mdfacade.mdfactory-method.mdflyweight.mdinterpreter.mditerator.mdmediator.mdmemento.mdnull-object.mdobject-pool.mdobserver.mdprivate-class-data.mdprototype.mdproxy.mdsingleton.mdstate.mdstrategy.mdtemplate-method.mdvisitor.md详细介绍
设计模式
按意图(创建型、结构型、行为型)组织的 26 种设计模式参考,包含 PHP、Python、Java、C++ 等语言的实现、UML 指南和实用案例。
模式索引
创建型模式
- Abstract Factory - 创建一系列相关对象,而无需指定其具体类 → 参考
- Builder - 通过逐步构建的过程组装复杂对象 → 参考
- Factory Method - 声明一个用于创建对象的接口,让子类决定具体类型 → 参考
- Prototype - 复制现有对象,而不与其具体类耦合 → 参考
- Singleton - 确保一个类只有一个实例 → 参考
- Object Pool - 回收创建成本高的对象,以便重复使用 → 参考
结构型模式
- Adapter - 将一种接口转换为客户端所需的另一种接口 → 参考
- Bridge - 将抽象与其实现分离,使两者可以独立演进 → 参考
- Composite - 将对象组织成树形结构,以便统一处理 → 参考
- Decorator - 通过包装动态地为对象添加新行为 → 参考
- Facade - 为复杂子系统提供简单接口 → 参考
- Flyweight - 通过在多个对象间共享公共状态来减少内存占用 → 参考
- Proxy - 通过替代对象管理对对象的访问 → 参考
- Private Class Data - 限制对类属性的访问 → 参考
行为型模式
- Chain of Responsibility - 通过处理器链路由请求 → 参考
- Command - 将请求表示为独立对象 → 参考
- Interpreter - 建立语法表示及其解释器 → 参考
- Iterator - 遍历元素,同时不暴露底层结构 → 参考
- Mediator - 通过中央协调器理清依赖关系 → 参考
- Memento - 在不破坏封装的前提下保存并恢复对象状态 → 参考
- Null Object - 提供一个无操作的默认对象,以消除空值检查 → 参考
- Observer - 状态变化时自动通知依赖对象 → 参考
- State - 在内部状态转换时改变行为 → 参考
- Strategy - 使算法可以在运行时互换 → 参考
- Template Method - 定义算法骨架,并由子类实现具体步骤 → 参考
- Visitor - 在不修改对象类的情况下为对象添加操作 → 参考
何时使用哪种模式
| 问题 | 模式 |
|---|---|
| 需要创建一组相关对象 | 抽象工厂 |
| 构建选项繁多的复杂对象 | 建造者 |
| 希望将实例化延迟到子类 | 工厂方法 |
| 需要复制复杂对象 | 原型 |
| 需要确保全局只有一个实例 | 单例 |
| 需要让不兼容的接口协同工作 | 适配器 |
| 希望独立改变抽象和实现 | 桥接 |
| 需要统一处理树形结构 | 组合 |
| 无需创建子类即可动态添加职责 | 装饰器 |
| 简化复杂子系统的接口 | 外观 |
| 许多相似对象消耗过多内存 | 享元 |
| 控制访问、添加延迟加载或记录访问日志 | 代理 |
| 需要为请求设置多个处理程序,但不确定由哪个处理 | 责任链 |
| 需要对操作进行排队、记录或撤销 | 命令 |
| 需要解释简单的语言或语法 | 解释器 |
| 遍历集合,同时不暴露其内部结构 | 迭代器 |
| 需要降低多个通信对象之间的耦合 | 中介者 |
| 需要撤销或快照功能 | 备忘录 |
| 一对多事件通知 | 观察者 |
| 对象行为取决于其状态 | 状态 |
| 需要在运行时切换算法 | 策略 |
| 可自定义步骤的算法骨架 | 模板方法 |
| 无需修改对象结构即可添加操作 | 访问者 |
最佳实践
- 优先选择组合而非继承:在构建深层类层次结构之前,先考虑装饰器、策略或桥接模式
- 将模式用于实际问题,而非假设的问题
- 在适用时使用语言的现代特性:用枚举表示状态,用不可变值类型表示值对象,用一等函数实现策略
- 在合适时组合使用模式(例如,建造者 + 流畅接口、策略 + 工厂方法)
- 尽量精简模式实现。如果模式带来的复杂性超过其消除的复杂性,请重新考虑是否使用
评论
支持 Markdown