1. 从招式到心法:设计模式的本质认知
我第一次接触设计模式是在2008年,当时啃完了那本著名的《设计模式:可复用面向对象软件的基础》。和大多数初学者一样,我沉迷于记忆各种模式的UML图和示例代码,以为掌握了23种设计模式就能写出优雅的代码。直到参与一个大型分布式系统开发时,我才真正明白:设计模式不是银弹,生搬硬套只会让代码变得臃肿难懂。
设计模式本质上是对特定场景下优秀设计经验的总结,就像武术中的招式。Singleton(单例)模式解决的是全局唯一访问问题,Observer(观察者)模式处理的是对象间的一对多依赖关系。但问题在于,现实开发中很少有场景能完全匹配教科书式的模式定义。就像独孤九剑的精髓在于"无招胜有招",真正的高手需要理解模式背后的设计原则,而非死记硬背实现方式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设计原则:比模式更重要的内功心法
2.1 SOLID原则的实战解读
SOLID原则是面向对象设计的基石,我习惯把它们看作设计模式背后的"内功":
-
单一职责原则(SRP):在电商系统开发中,我曾看到一个Order类同时处理订单创建、支付验证和物流跟踪。重构时我们将其拆分为Order、PaymentValidator和ShippingTracker三个类,每个类的修改原因变得单一明确。
-
开闭原则(OCP):某次需求变更要求支持新的支付方式。得益于我们之前用Strategy模式抽象支付接口,只需新增AlipayStrategy类而无需修改现有代码,这正是"对扩展开放,对修改关闭"的典型实践。
-
里氏替换原则(LSP):继承滥用是新手常见错误。记得有次Code Review发现同事让Square继承Rectangle,结果重写setWidth方法时破坏了数学关系。这提醒我们:子类必须能够替换父类而不影响程序正确性。
2.2 组合优于继承的现代实践
GoF设计模式中,Decorator和Strategy模式都体现了组合思想。在开发UI组件库时,我们通过组合方式实现样式扩展:
cpp复制class Button {
public:
virtual void render() = 0;
virtual ~Button() {}
};
class PrimaryButton : public Bu
