用途
该技能适用于“主要问题不是单纯代码质量,而是模式选择与模式适配”的场景。用于在以下情形中做决策:选择或评审 GoF 模式、企业应用架构模式、Criteria/查询对象模式或 Clean Architecture 分层结构;比较当前变更压力与直接解决方案,判断是否值得引入新的抽象或接缝。
主要能力
- 从问题出发选模式:先识别变更压力,而不是先想模式名。压力类型包括构造复杂度、行为变化、状态相关行为、外部集成不匹配、可选的分层行为等。
- 模式选择工作流:识别压力 → 选择可能的模式族 → 检查适配性(是否消除知识重复、是否使变更局部化、是否比小重构更能改善对象协作、团队是否易读)。若模式比问题更重,则停止。
- 模式启发式:资料给出了多个模式的使用条件,包括:
- Strategy:行为按策略或算法变化且应可替换时;
- State:同一对象随状态迁移改变行为且迁移规则重要时;
- Factory:创建逻辑复杂、重复或隐藏有意义变化时;
- Adapter:外部 API 与内部模型不匹配时;
- Decorator:需要在不改变底层契约的前提下叠加行为时;
- Composite:叶子与组合对象应响应同一消息时;
- Observer:一个对象状态变化应触发其他对象反应且来源无需知道监听者时;
- Command:需要解耦请求发送者与执行者,或请求需排队、记录、撤销时;
- Template Method:多个类共享算法骨架但具体步骤不同,且骨架不应被子类改变时;
- Builder:构造复杂对象需要多步骤、可选部分或特定构建顺序时;
- Proxy:需要替身对象以延迟创建、控制访问或代表远程资源时;
- Facade:复杂子系统需要为不需要完整细节的调用者提供简化接口时;
- Repository:希望将业务逻辑与数据访问解耦,并把对象集合当作内存中集合处理时。
- 警告信号:模式词汇压过领域语言;简单抽取即可同样解决问题;模式制造大量类但耦合依旧;本可用组合隔离变化却用了继承;团队必须先理解模式才能理解业务规则。
- 规则与边界建议:若主要决策涉及 Aggregate 仓储语义、契约归属,或 Repository 与 DAO/查询服务/网关的取舍,应改用 ddd-best-practices 技能。
使用方式
该技能以文档和参考材料形式提供,没有给出安装命令或运行代码。使用者按需查阅:
references/pattern-fit-evidence.md:比较模式与直接方案、判断新接缝是否值得成本;references/pattern-selection-guide.md:模式与问题的映射;references/composition-vs-inheritance.md:组合与继承的结构取舍;references/language-examples.md:TypeScript、Java、Python、C#、Ruby、PHP、Go、Rust 的示例索引;references/go-examples.md:Go 示例(接口实现 Strategy/State、函数式选项作 Builder、channel 作 Observer、(value, error)作 Result);references/rust-examples.md:Rust 示例(trait 作 Strategy、enum 作 State/Visitor、trait object 做依赖注入、Result<T,E>);references/behavioral-patterns.md:Observer、Command、Template Method、Chain of Responsibility、Iterator、Mediator、Visitor、Memento;references/creational-patterns.md:Builder、Abstract Factory、Factory Method、Singleton、Prototype 的取舍;references/structural-patterns.md:Proxy、Facade、Bridge、Flyweight、Adapter,含 Facade 与 Adapter 的区分;references/enterprise-patterns.md:PoEAA 全部 51 个模式,按 Domain Logic、Data Source、ORM Behavioral/Structural、Web Presentation、Distribution、Concurrency、Session State、Base Patterns 分组;references/patterns-in-practice.md:向模式重构的实践启发式、Observer 经验、Command Bus、Result 模式、DI 容器内部机制;references/implementation-patterns.md:Kent Beck 的微观代码模式(命名、组合方法、守卫子句、值对象、惰性/急切初始化、集合访问器、方法对象);references/clean-architecture.md:Clean Architecture 分层(Entities、Use Cases、Interface Adapters、Frameworks)、依赖规则、Ports & Adapters、Skinny Controllers、SOLID 作为架构支撑;references/criteria-pattern.md:Criteria/查询对象决策、类型化谓词 AST、逻辑字段映射、后端能力、SQL 参数化、连接、分页、边界转换与适配器测试。
适用场景
- 在引入新模式前评估其是否值得;
- 在多种候选模式间做选择;
- 评审已有代码中的模式使用是否合理;
- 将模式改造应用到有风险的既有代码中(配合 refactoring-best-practices);
- 在 HTTP API 边界应用 Adapter、DTO、Result、Repository(配合 rest-api-best-practices);
- 日常代码质量选择(配合 oop-best-practices);
- Aggregate 仓储契约与持久化边界(配合 ddd-best-practices)。
限制
资料未提供该技能的具体安装方式、运行命令、支持的平台或工具集成形式;未说明收费、价格或效果指标。内容以模式选择的方法论与参考文档为主,不包含可直接执行的代码产物。