很多开发者第一次接触设计模式,都会有一个疑问:“我现在代码也能跑,为啥还要用设计模式?”
答案往往出现在后期:当需求变化、代码膨胀、维护成本越来越高时,你会发现——重构,几乎不可避免。
而设计模式,正是代码重构中最常用、最可靠的工具之一。
一、什么是代码重构
代码重构(Refactoring)指的是:
它解决的问题包括:
• 代码重复严重• 逻辑混乱、if-else 满天飞• 类职责不清,一个类什么都干• 改一个需求,牵一大片代码
重构不是“重写”,而是逐步演进式优化。
二、没有设计模式的代码长什么样
先看一个常见的“坏味道”示例:
def pay(order, pay_type): if pay_type == "wechat": print("使用微信支付") elif pay_type == "alipay": print("使用支付宝支付") elif pay_type == "bank": print("使用银行卡支付") else: raise ValueError("不支持的支付方式")
问题在哪里?
• 每新增一种支付方式,都要修改这个函数• if-elif 不断膨胀• 不符合开闭原则
三、用设计模式驱动重构
1. 第一步:识别变化点
上面代码中,变化的是什么?
这正是使用设计模式的信号。
2. 第二步:引入策略模式进行重构
from abc import ABC, abstractmethodclass Payment(ABC): @abstractmethod def pay(self, order): passclass WeChatPay(Payment): def pay(self, order): print("使用微信支付")class AliPay(Payment): def pay(self, order): print("使用支付宝支付")class BankPay(Payment): def pay(self, order): print("使用银行卡支付")
使用策略:
def process_pay(order, payment: Payment): payment.pay(order)
新增支付方式时:
• 新增一个类• 无需修改原有逻辑
四、设计模式在重构中的作用
1. 消除重复代码
• 提取公共逻辑• 通过模板方法、策略模式复用结构
2. 替代复杂条件判断
• if-else → 策略模式 / 状态模式• 多分支处理 → 责任链模式
3. 解耦模块依赖
• 直接依赖具体类 → 依赖抽象• 使用工厂、代理、中介者模式降低耦合
4. 提供可扩展点
• 新功能通过新增类实现• 避免“牵一发动全身”的修改风险
五、重构不是一开始就用设计模式
实际上:
• 小项目:过度设计反而降低效率• 需求不明确时:先写清晰代码更重要• 变化出现后:再引入设计模式重构
六、如何在实际项目中使用设计模式重构
实用建议:
1. 先写清晰、可读的代码2. 出现以下信号时,考虑重构: • if-else 超过 3 层 • 类的方法越来越多 • 修改一个需求影响多个模块3. 从最小范围开始重构4. 用测试保障重构安全5. 引入最简单可用的模式
七、总结
设计模式不是目的,而是手段。它们最大的价值在于:
• 指导你如何重构代码• 帮助代码在变化中保持稳定• 让系统更容易理解、维护和扩展