设计模式实战:策略、观察者、工厂与现代软件工程中的应用
《设计模式:可复用面向对象软件的基础》(Gamma、Helm、Johnson、Vlissides,1994)提出的23种模式成为了软件工程的共同词汇表,使开发者能够用简洁的词语描述复杂的设计意图(”这里用观察者模式”)。但设计模式被过度使用的问题同样普遍——引入不必要的抽象层会增加复杂性而非减少它。理解设计模式的关键是识别问题,而非套用模式。
策略模式(Strategy Pattern)
问题:你有一个操作(如排序、支付、折扣计算),需要支持多种不同的实现,且这些实现可能在运行时切换。
解决:将每种实现封装为实现同一接口的独立类(策略类),使用者通过接口调用,运行时注入具体的策略实现。
实际案例:电商折扣系统(新用户折扣策略、会员折扣策略、节日折扣策略)、支付处理(信用卡策略、PayPal策略、加密货币策略)、压缩工具(ZIP策略、GZIP策略、LZ4策略)。现代依赖注入框架(Spring、FastAPI的依赖注入)在架构层面实现了策略模式的思路。
观察者模式(Observer Pattern)
问题:一个对象(主题/Subject)的状态变化需要通知多个依赖它的对象(观察者/Observer),但主题不应与观察者紧耦合。
解决:主题维护观察者列表,状态变化时通知所有注册的观察者。这是事件驱动架构和响应式编程的基础模型——JavaScript的`addEventListener`、Node.js的`EventEmitter`、RxJS的Observable均是观察者模式的变体。
前端框架中,React的Context/useState + useEffect、Vue的响应式系统(Ref/Computed/Watch)都体现了观察者模式的核心思想。消息队列(Kafka、RabbitMQ)和Pub/Sub系统(Redis Pub/Sub、Google Pub/Sub)是观察者模式在分布式系统层面的实现。
现代工程中的模式演变
函数式编程的普及使部分传统面向对象设计模式变得不必要或形式改变——策略模式在支持高阶函数的语言中直接传入函数即可,无需接口和类。理解设计模式的思想比记忆其经典实现更重要,参考Refactoring.Guru获取多语言的现代实现示例。




