设计模式怎么用提示词:按代码场景推荐合适的设计模式(含不该用的情况和改造前后对比)

代码里 if-else 越堆越多、新增一种类型就要改好几处,想知道该不该用、用哪种设计模式时用:贴上代码和变化方向,AI 判断问题本质,推荐最简单的有效方案(不一定是设计模式),并给出改造前后的代码对比。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
你是一名务实的资深工程师。你认为设计模式是解决特定问题的工具,而不是代码质量的标志;能用简单函数解决的,就不要引入类层次结构。

- 语言:[语言](例:Python、Java、TypeScript)
- 代码:
  [粘贴代码]
- 让我难受的地方:[如每加一种支付方式都要改五处]
- 预计未来的变化:[如半年内还要接入 3 种支付方式]

请回答:
1. 问题本质:这段代码的「变化点」在哪里,目前的结构为什么让变化变得困难。
2. 方案对比(2 到 3 个):从最简单的方案开始,例如:
   - 提取函数、用字典或映射表代替分支;
   - 合适的设计模式(如策略、工厂、模板方法、观察者、责任链、适配器、装饰器);
   - 语言自身的特性(如一等函数、枚举带方法、接口)。
   每个方案写明:结构简述、能解决什么、引入了什么成本。
3. 推荐:结合「预计未来的变化」选择一个方案,说明为什么。如果变化很少发生,可以明确建议「保持现状,只做小的整理」。
4. 改造前后对比:给出改造后的完整代码,说明新增一种类型时需要改动哪些地方(应该只有一处或很少几处)。
5. 过度设计提醒:指出在这个场景下哪些模式看起来相关但不该用,以及为什么。
6. 改造步骤:如何在不改变行为的前提下小步完成改造,每一步都可以运行测试。

高亮处换成你自己的内容:[语言]、[粘贴代码]、[如每加一种支付方式都要改五处]、[如半年内还要接入 3 种支付方式]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[预计未来的变化] 是判断要不要引入模式的关键依据。如果分支很多年才加一个,现在的 if-else 可能就是最好的写法;如果下个季度要加三个,就值得把变化点抽出来。

常见坑:

  • 为了「用上设计模式」而重构,一个简单功能拆成五个类、三层接口,后来的人更难看懂。模板要求先给最简单的方案。
  • 在 Python、JavaScript 这类函数是一等公民的语言里,很多经典模式(策略、命令)用一个函数字典就能实现,不需要照搬面向对象语言的写法。
  • 改造时顺手改了行为。先确保有测试覆盖,再小步改结构。

追问技巧:追问「如果一年后需求变成按地区选择不同的支付方式组合,这个结构还能撑住吗」,检验方案对未来变化的适应性。想学习时可以追问「用这段代码讲解策略模式和工厂模式的区别」。

示例输出

示例,仅供参考(Python,按支付方式分支)

问题本质:变化点是「支付方式」,但每种方式的逻辑分散在 pay()、refund()、query() 三个函数的分支里,新增一种要改三处。

推荐:每种支付方式实现同一组方法,用字典注册。这是策略模式的轻量写法,不需要工厂类。

python
from typing import Protocol

class PaymentChannel(Protocol):
    def pay(self, order) -> str: ...
    def refund(self, order, amount) -> None: ...

CHANNELS: dict[str, PaymentChannel] = {
    "alipay": AlipayChannel(),
    "card": CardChannel(),
}

def pay(order):
    channel = CHANNELS.get(order.channel)
    if channel is None:
        raise ValueError(f"不支持的支付方式:{order.channel}")
    return channel.pay(order)

新增一种支付方式:新写一个类,在 CHANNELS 中加一行。

不建议:抽象工厂、模板方法——目前各支付方式的流程差异很大,没有可复用的公共骨架。

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~