设计模式之美-0-前言

前言

1.学习设计模式的好处

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

  2. 告别被别人吐槽的烂代码

  3. 提高复杂代码的设计和开发能力

    如何分层、分模块?应该怎么划分类?每个类应该具有哪些属性、方法?怎么设计类之间的交互?该用继承还是组合?该使用接口还是抽象类?怎样做到解耦、高内聚低耦合?该用单例模式还是静态方法?用工厂模式创建对象还是直接new出来?如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?

  4. 让读源码、学框架事半功倍

  5. 为职场发展做铺垫

2.如何评价代码质量的高低

  • 描述代码质量的常用词汇:

    灵活性、可扩展性、可维护性、可读性、可复用、可测试性、模块化、高内聚低耦合、高效、安全性、兼容性、易用性、整洁、清晰、简单、直接、少即是多、文档详尽、分层清晰、正确性、健壮性、鲁棒性、稳定性、优雅。。。

2.1代码质量评价的特点和难点

  1. 不同的词汇从不同的维度对代码进行评价,很难通过其中的某个或者某几个词汇来全面评价代码质量。
  2. 不同的评价维度并不完全独立,有些具有包含关系、重叠关系或者影响关系。
  3. 代码质量的评价因评价人的不同具有主观性。

2.2常用、重要的几个评价标准

  1. 可维护性 maintainability

    维护代码指:修改bug、修改老的代码、添加新的代码等工作。

    “代码易维护”指:在不破坏原有代码设计、不引入新的bug的情况下,能够快速的修改或者添加代码。

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

    如何判断代码的可维护性:代码的可维护性是很多因素协同作用的结果。代码的可读性好、简洁、可扩展性好,就会使得代码易维护;相反,就会使得代码不易维护。如果代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等等,就意味着代码易维护。除此之外,代码的易维护性还跟项目代码量的多少、业务的复杂程度、利用到的技术的复杂程度、文档是否全面、团队成员的开发水平等诸多因素有关。

  2. 可读性 readability

    “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”

    可读性是评价代码质量最重要的指标之一,代码的可读性在很大程度上会影响代码的可维护性。

    如何评价代码的可读性:是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。

    code review是一个很好的测验代码可读性的手段。

  3. 可扩展性 extensibility

    可扩展性表示代码应对未来需求变化的能力,在很大程度上决定代码是否易于维护。

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

    设计原则“对修改关闭,对扩展开放”。

  4. 简洁性 simplicity

    KISS设计原则:“Keep It Simple, Stupid”,意为尽量保持代码简单。代码简单、逻辑清晰意味着可读性好、易维护。

  5. 可复用性 reusability

    代码的可复用性为:尽量减少重复代码的编写,复用已有的代码。

    比如,在编程语言的面向对象(OOP)特性中,继承、多态存在的目的之一就是为了提高代码的可复用性;在设计原则中,单一职责原则与代码的可复用性有关;在重构技巧中,解耦、高内聚、模块化能提高代码的可复用性。可复用性是很多设计原则、思想、模式等所要达到的最终效果。

    DRY设计原则:“Don’t Repeat Yourself”。

  6. 可测试性 testability

2.3 如何写出高质量的代码

如何写出易维护、易读、易扩展、简洁、可复用、可测试的代码:掌握一些编程方法论,包括面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等。

3.学习大纲

3.1 面向对象设计思想

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

3.2 设计原则

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

3.3 设计模式

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

23种经典的设计模式:

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

3.4 编程规范

编程规范主要解决的是代码的可读性问题。可以参考书籍《重构》、《代码大全》、《代码整洁之道》。

20条最快速改善代码质量的编程规范。

3.5 代码重构

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

五者之间的联系

  1. OOP依据四大特性可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
  2. 设计原则是很多设计模式的指导原则。
  3. 设计模式相比设计原则更加具体、更加可执行。
  4. 编程规范相对于设计原则和设计模式,更加具体、更加注重代码细节、更加能落地。
  5. 重构利用的就是面向对象、设计原则、设计模式、编码规范这些理论。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值