zoukankan      html  css  js  c++  java
  • 设计模式学习之路(一)

    设计模式

    1.什么是设计模式?

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式可以直接的提高开发能力、能够写出可扩展、可读、可维护的高质量代码。

    2.学习设计模式的作用

    1.应对面试中设计模式的问题

    2.提高代码的质量

    3.提高复杂代码的实际和开发

    4.提高读源码、学框架的效率

    3.怎么判断代码的好坏

    可以根据不同维度进行评判。

    (1)可维护性(maintainability)

    维护在代码中就是修改bug,修改老代码,添加新的代码。

    代码可维护就是:在不破坏原有代码设计,不引入新的bug的情况下,能够快速地修改过着添加代码。

    代码不易维护:修改过着添加代码需要冒着极大的引入新bug的风险,并且需要花费很长时间才能完成。

    (2)可读性(readability)

    软件设计大师 Martin Fowler 曾经说过:“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” “任何傻瓜都会编写计算机能理解的代码。好的程序员能够编写人能够理解的代码。”

    代码被阅读的次数远远超过被编写和执行的次数。

    代码的可读性应该是评价代码质量最重要的指标之一。写代码的时候,时刻要考虑到代码是否易读、易理解,从而会影响到代码的可维护性。

    代码可读性的要求:

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

    (3)可扩展性(extensibility)

    代码的可扩展性:在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。

    对修改关闭,对扩展开放

    (4)灵活性(flexibility)

    灵活性是一个抽象的评价标准。

    • 当要添加一个新的功能代码时,原有代码已经预留好了扩展点,不需要修改原来的代码,只要在扩展点上进行添加新代码即可。可以说代码易扩展,还可以说代码灵活。
    • 当要实现一个功能时,发现原有代码中已经抽象出了很多底层可以复用的模块、类等代码,可以直接进行使用。可以说代码易复用之外,还可以说代码写得好灵活。
    • 当使用某组接口时,如果这个接口可以应对各种使用场景,满足不同的需求。可以说接口易用之外,还可以说这个接口设计得好灵活或者代码写得好灵活。

    (5)简洁性(simplicity)

    KISS 原则:“Keep It Simple,Stupid”。

    尽量保持代码简单。

    代码简单、逻辑清晰意味着:易读,易维护。

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

    (6)可复用性(reusability)

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

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

    (7)可测试性(testability)

    代码可测试性的好坏,能从侧面上非常准确地反应代码质量的好坏。

    4.如何才能写出高质量的代码

    面向对象中的继承、多态能让我们写出可复用的代码;编码规范能让我们写出可读性好的代码;设计原则中的单一职责、DRY、基于接口而非实现、里式替换原则等,可以让我们写出可复用、灵活、可读性好、易扩展、易维护的代码;设计模式可以让我们写出易扩展的代码;持续重构可以时刻保持代码的可维护性等等。

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

    (1)面向对象

    现在主流的变成风格有三种:面向过程、面向对象和函数式编程。面向对象又是其中最主流的。因为面向对象编程具有丰富的特性:封装、继承、多态和抽象。可以实现很多复杂的设计思路,是很多设计原则和设计模式编码的基础。

    主要掌握的知识点:

    • 面向对象的四大特性:封装、继承、多态、抽象
    • 面向对象编程与面向过程编程的区别和联系
    • 面向对象分析、面向对象设计、面向对象编程
    • 接口和抽象类的区别以及各自的应用场景
    • 基于接口而非实现编程的设计思想
    • 多用组合少用继承的设计思想
    • 面向过程的贫血模型和面向对象的充血模型

    (2)设计原则

    设计原则是指导我们代码设计的一些经验总结。设计原则这块儿的知识有一个非常大的特点,那就是这些原则听起来都比较抽象,定义描述都比较模糊,不同的人会有不同的解读。

    对于每一种设计原则,我们需要掌握它的设计初衷,能解决哪些编程问题,有哪些应用场景。

    需要理解并掌握的常用设计模式:

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

    (3)设计模式

    设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。大部分设计模式要解决的都是代码的可扩展性问题。

    设计模式有23种,又可以分为三大类:创建型、结构型、行为型。

    a.创建型

    常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。

    不常用:原型模式。

    b.结构型

    常用:代理模式、桥接模式、装饰者模式、适配器模式

    不常用:门面模式、组合模式、享元模式。

    c.行为型

    常用:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。

    不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。

    (4)编程规范

    编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节。

    可以参考书籍:《重构》《代码大全》《代码整洁之道》。

    (5)代码重构

    在软件开发中,只要软件在不停地迭代,就没有一劳永逸的设计。

    重构是软件开发中非常重要的一个环节。持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。

    重构的工具就是前面罗列的那些面向对象设计思想、设计原则、设计模式、编码规范。

    需要掌握的知识点:

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

    五者之间的联系

    • 面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
    • 设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如,“开闭原则”是很多设计模式(策略、模板等)的指导原则。
    • 设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。
    • 编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的理论基础主要就是编程规范。
    • 重构作为保持代码质量不下降的有效手段,利用的就是面向对象、设计原则、设计模式、编码规范这些理论。

    面向对象、设计原则、设计模式、编程规范、代码重构,这五者都是保持或者提高代码质量的方法论,本质上都是服务于编写高质量代码这一件事的。

  • 相关阅读:
    Creating A Moddable Unity Game
    C# 动态编译
    编程题:求一个矩阵中最大的二维子矩阵(即二维子矩阵的和最大)好未来
    编程题:求单链表倒数第k位的值(最后一位为倒数第0位)好未来
    Docker执行错误报错--Error response from daemon: No command specified
    suse下静默方式安装oracle(无图形界面)
    无法删除oracle用户的问题
    Python正则表达式
    Linux密码复杂度问题
    编程练习:实现树的层次遍历 (CVTE笔试)
  • 原文地址:https://www.cnblogs.com/zsiscool/p/12448711.html
Copyright © 2011-2022 走看看