【读书活动感悟分享】极客充电队——《Head First 设计模式》第一章读书心得_文章

【读书活动感悟分享】极客充电队——《Head First 设计模式》第一章读书心得

朱伟健
发表于 2025-10-09 17:23:56

极客充电队在2025年9月28日进行了首次读书活动分享,极客充电队本次计划集体阅读《Head First 设计模式》第二版,梳理自己对于设计模式的认识,温故而知新,在理论结合实际过程中加深对于设计模式的理解。





        第一章主要介绍了设计模式的基本概念、重要原则以及策略模式的具体应用。

        书中是通过一个简单的鸭子模拟应用案例展开,最初的设计是使用继承来实现鸭子的各种行为,但随着需求的变化,如要给不同鸭子添加飞行行为,且并非所有鸭子都能飞行,这种继承方式暴露出诸多问题,如代码重复、难以维护、运行时难以改变等。在面临这些问题的时候,一遍又一遍修改代码不是长久之计,古语言:以不变应万变,需要从变化中寻找不变的部分并"分离"这两部分内容。那么,我们应该如何做呢?

        这一章中提出了三个面向对象设计的原则(还有另外四个,应该会在后续章节中介绍)

  • 封装变化(开放封闭原则):找出应用中可能变化的部分,将其与不变的部分分离,这样可以降低代码的耦合度,提高系统的可维护性和可扩展性。简单说就是该变化的可以变,业务上总归是会变化的,这方面持开放态度,但是不该变的就不要一次又一次修改,这部分是能不改就不改,作为系统核心的“骨架”部分是不能经常变的。
  • 多用组合,少用继承(合成复用原则):组合关系比继承关系更灵活,通过将对象的行为封装成独立的类,然后使用组合的方式将这些行为添加到需要的对象中,可以避免继承带来的代码重复和灵活性差的问题。
  • 针对接口编程,而不是针对实现编程(依赖倒置原则):强调依赖抽象而不是具体类,这样可以使代码更加灵活,易于替换和扩展实现类。

    第一章中提到了“策略模式”,并以这个模式为例解决鸭子产品研发过程中的难题。

  • 定义:定义了算法族(这里要宽泛的理解,不能看到算法就想到是某种高大上的技术,算法也可以很普通,比如呱呱叫是一种算法,咯咯叫也可以叫算法),分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
  • 实现:在鸭子模拟案例中,将飞行行为和呱呱叫行为分别封装成接口及其实现类,如FlyBehavior接口及其实现类FlyWithWings、FlyNoWay等,QuackBehavior接口及其实现类Quack等。然后在Duck类中通过组合这些行为接口,并使用 setter 方法实现动态设置行为,从而使鸭子的行为可以在运行时灵活改变。

    除了分享书中的内容,还组织大家现场按照UML编写实际代码:

    设计模式有什么价值呢?

  • 模式是历经验证的 面向对象(OO) 设计经验,不是代码,而是针对设计问题的通用解决方案,可以应用到特定的应用中。
  • 模式让开发人员之间有共享的语言,能够最大化沟通的价值,同时也有助于建造出具有可复用、可扩充、可维护特性的良好 OO 设计系统。


“策略模式”在特来电充电业务有没有应用呢?策略模式关注的是对于算法的封装和切换,在研发熔断降级功能的时候就遇到过这个场景。比如说A场景和B场景都需要熔断降级,但是熔断降级有很多种不同的方式和算法,A场景需要的是异常调用数量达到某个阈值后熔断,B场景调用中是要求有个专用检测接口,只要检测接口没有问题就不熔断,检测接口调用超时就直接熔断。这两种熔断需求可以说本质上是一样,但是实现方法差别很大,因此就专门将按照异常计数熔断和按照旁路检测熔断做成了两种熔断策略,在使用过程中可以选择性配置熔断策略,触发不同的异常检测逻辑。

关于这部分内容概要总结为UML:




175 0

评论


意见反馈