• 设计模式简记-导读


    1.设计模式导读

    1.1为什么要学设计模式

    • 应对面试中的设计模式相关问题
    • 告别写被人吐槽的烂代码
    • 提高复杂代码的设计和开发能力
    • 让读源码、学框架事半功倍
      • 优秀的开源项目、框架、中间件,就像一个集各种高精尖技术在一起的战斗机。如果你想剖析它的原理、学习它的技术,而你没有积累深厚的基本功,就算把这台战斗机摆在你面前,你也不能完全参透它的精髓,只是了解个皮毛,看个热闹而已。
    • 为你的职场发展做铺垫
      • 不做低级码农
      • 具备review代码能力
      • 作为技术leader引导团队,避免低质量代码以至线上BUG频发,解放时间做更有意义的事
      • 招聘考察候选人

    1.2如何评判代码质量

    1.2.1常用标准

    • 可维护性(maintainability)

      落实到编码开发,所谓的“维护”无外乎就是修改 bug、修改老的代码、添加新的代码之类的工作。所谓“代码易维护”就是指,在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或者添加代码。所谓“代码不易维护”就是指,修改或者添加代码需要冒着极大的引入新 bug 的风险,并且需要花费很长的时间才能完成。

    • 可读性(readability)

      需要看代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。

      代码的可读性在非常大程度上会影响代码的可维护性。毕竟,不管是修改 bug,还是修改添加功能代码,我们首先要做的事情就是读懂代码。代码读不大懂,就很有可能因为考虑不周全,而引入新的 bug。

    • 可扩展性(extensibility)

      代码的可扩展性表示,我们在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。说直白点就是,代码预留了一些功能扩展点,你可以把新功能代码,直接插到扩展点上,而不需要因为要添加一个功能而大动干戈,改动大量的原始代码。

    • 灵活性(flexibility)

      几个灵活性场景:

      • 添加一个新的功能代码的时候,原有的代码已经预留好了扩展点
      • 实现一个功能的时候,发现原有代码中,已经抽象出了很多底层可以复用的模块、类等代码,我们可以拿来直接使用
      • 使用某组接口的时候,这组接口可以应对各种使用场景,满足各种不同的需求
    • 简洁性(simplicity)

      KISS原则

      思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。这也是一个编程老手跟编程新手的本质区别之一。

    • 可复用性(reusability)

      代码的可复用性可以简单地理解为,尽量减少重复代码的编写,复用已有的代码

      代码可复用性跟 DRY(Don’t Repeat Yourself)这条设计原则的关系紧密

      • 面向对象特性的时候,我们会讲到继承、多态存在的目的之一,就是为了提高代码的可复用性;
      • 当讲到设计原则的时候,我们会讲到单一职责原则也跟代码的可复用性相关;
      • 当讲到重构技巧的时候,我们会讲到解耦、高内聚、模块化等都能提高代码的可复用性。
    • 可测试性(testability)

      代码可测试性的好坏,能从侧面上非常准确地反应代码质量的好坏。代码的可测试性差,比较难写单元测试,那基本上就能说明代码设计得有问题。

    1.3面向对象、设计原则、设计模式、编程规范、重构五者的关系

    1.3.1面向对象

    • 面向对象的四大特性:封装、抽象、继承、多态

    • 面向对象编程与面向过程编程的区别和联系

    • 面向对象分析、面向对象设计、面向对象编程

    • 接口和抽象类的区别以及各自的应用场景

    • 基于接口而非实现编程的设计思想

    • 多用组合少用继承的设计思想

    • 面向过程的贫血模型和面向对象的充血模型

    1.3.2设计原则

    • SOLID 原则 -SRP 单一职责原则
    • SOLID 原则 -OCP 开闭原则
    • SOLID 原则 -LSP 里式替换原则
    • SOLID 原则 -ISP 接口隔离原则
    • SOLID 原则 -DIP 依赖倒置原则
    • DRY 原则、KISS 原则、YAGNI 原则、LOD 法则

    1.3.3设计模式

    1. 创建型常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。不常用的有:原型模式。
    2. 结构型常用的有:代理模式、桥接模式、装饰者模式、适配器模式。不常用的有:门面模式、组合模式、享元模式。
    3. 行为型常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。

    1.3.4编程规范

    ​ 编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节。即便你可能对设计原则不熟悉、对设计模式不了解,但你最起码要掌握基本的编码规范,比如,如何给变量、类、函数命名,如何写代码注释,函数不宜过长、参数不能过多等等。

    1.3.5代码重构

    知识点:

    • 重构的目的(why)、对象(what)、时机(when)、方法(how);
    • 保证重构不出错的技术手段:单元测试和代码的可测试性;
    • 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。

    1.3.6五者之间联系

    • 面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。

    • 设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则”是很多设计模式(策略、模板等)的指导原则。

    • 设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。

    • 编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的理论基础主要就是编程规范。

    • 重构作为保持代码质量不下降的有效手段,利用的就是面向对象、设计原则、设计模式、编码规范这些理论。

  • 相关阅读:
    作业
    Day2
    Day1
    让Antd 的Modal 可以拖动
    JS日期处理——月末、季度末
    前端常见问题收录
    前端面试题收录
    使用ES6 Set类型 数组去重
    小程序开发:用Taro搭建框架
    JS 树形结构与数组结构相互转换、在树形结构中查找对象
  • 原文地址:https://www.cnblogs.com/wod-Y/p/12331396.html
Copyright © 2020-2023  润新知