A1 为什么学设计模式
- 潜移默化提升对技术的理解
- 写出高效、可扩展、可读、可维护的高质量代码
- 应对面试
- 提高复杂代码设计和开发能力
- 读源码和学框架事半功倍
A2 何为高质量代码
最常见的标准:
- 可维护性(maintainabilty)
- 在不破坏原有代码设计、不引入新的Bug的情况下,能够快速地修改或者添加代码。
- 具体:代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等。可读性(readability)
代码语言:txt复制- 符合编码规范、命名达意、注释详尽、函数长短合适、模块划分清晰、符合高内聚低耦合。可扩展性(extensibility)
代码语言:txt复制- 代码预留了一些功能扩展点,可把新功能代码,直接插到扩展点上,而不需要为添加一个功能而大动干戈,改动大量原始代码。灵活性(flexibility)
代码语言:txt复制- 易扩展,易复用,易用简洁性(simplicirty)
代码语言:txt复制- KISS原则:Keep It Simple, Stupid。
- 尽量保持代码简单、逻辑清晰:易读、易维护。
- 思从深而行从简,真正高手能云淡风轻地用最简单的方法解决最复杂的问题。可复用性(reusability)
代码语言:txt复制- 尽量减少重复代码的编写,复用已有的代码。
- 联系DRY(Don`t Repeat Yourself)设计原则。可测试性(testability)
代码语言:txt复制- 从侧面展现代码是否高质量
A3 面向对象 设计原则 设计模式 编程规范 重构
3.1 面向对象
目前主流编程范式/风格:
- 面向过程
- 面向对象(最主流)
- 函数式编程
重点:
- 四大特性:封装、抽象、继承、多态
- 与面向过程编程的区别和联系
- 面向对象分析、设计、编程
- 接口和抽象类的区别以及各自的应用场景
- 基于接口而非实现编程的设计思想
- 多用组合少用继承的设计思想
- 面向过程的贫血模型和面向对象的充血模型
3.2 设计原则
指导我们代码设计的一些经验总结。
常用设计原则:
- SOLOD 原则
- SRP 单一职责原则
- OCP 开闭原则
- LSP 里氏替换原则
- ISP 接口隔离原则
- DIP 依赖倒置原则
- DRY 原则
- KISS 原则
- YAGNI 原则
- LOD 原则
3.3 设计模式
针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。
大部分设计模式都是解决代码的可扩展性。
经典设计模式23种。
主要分类:
- 创建型
- 常用:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式
- 不常用:原型模式结构型
代码语言:txt复制- 常用:代理模式、桥接模式、装饰者模式、适配器模式
- 不常用:门面模式、组合模式、享元模式行为型
代码语言:txt复制- 常用:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式
- 不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介模式
3.4 编程规范
主要解决代码的可读性问题。
起码掌握基本的编码规范。
3.5 代码重构
因软件是不停迭代的,故代码需不停堆砌,原设计会存在一些问题,解决办法就是代码重构。
持续重构是保持代码质量不下降的有效手段。
重构的工具:面向对象设计思想、设计原则、设计模式、编码规范。
知识点:
- 重构的目的(why)、对象(what)、时机(when)、方法(how);
- 保证重构不出错的技术手段:单元测试和代码的可测试性;
- 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。
3.6 五者关系
- 基础:面向对象
- 指导:设计原则
- 思路:设计模式
- 可读:编程规范
- 持续:重构
目的:保持或提高代码质量
串起来:
- 面向对象的丰富特性,可实现多种复杂设计思路,为设计原则和设计模式等编码实现提供基础
- 设计原则指导我们设计代码和代码模式的经验和总结。
- 设计模式是总结的针对问题的解决方案和设计思路,提高代码可扩展性。
- 编程规范解决代码可读性,持续的小重构依赖的理论基础主要就是编程规范。
- 重构可使代码持续化,保持代码活力和质量。通过前四种理论实现。
A4 相关
下集:面向对象之总述
参考文献
极客时间:设计模式之美.王争。