用多态替换 switch:让代码更符合开闭原则
副标题 / 摘要 switch 往往会不断膨胀。本文用策略模式把分支逻辑拆分成可扩展的多态结构。 目标读者 需要重构条件分支的工程师 关注可维护性的团队 学习设计模式的开发者 背景 / 动机 分支逻辑一旦增长,switch 会变成维护噩梦。 多态可以把“选择逻辑”变成“可扩展结构”。 核心概念 策略模式:把算法封装为对象 开闭原则:对扩展开放,对修改关闭 多态分发:用对象替代条件分支 实践指南 / 步骤 识别 switch 的分支类型 为每个分支定义策略类 用工厂或映射选择策略 新增分支只新增类 可运行示例 class Formatter: def format(self, text): raise NotImplementedError class FailFormatter(Formatter): def format(self, text): return "error" class OkFormatter(Formatter): def format(self, text): return text + text def get_formatter(response): return {"FAIL": FailFormatter(), "OK": OkFormatter()}.get(response) if __name__ == "__main__": f = get_formatter("OK") print(f.format("hi")) 解释与原理 switch 把逻辑集中在一处,扩展时必须修改旧代码。 多态把分支拆成独立类,新增规则只需新增类。 常见问题与注意事项 小分支是否需要多态? 不一定,只有分支频繁扩展时值得。 ...