数据结构与算法
教你写出高效
的代码,设计模式
教你写出高质量
的代码- 写代码能够说是程序员每天要干的事情,要是代码都写很差,最基本的看家本领都练很差,整天堆砌烂代码,写代码还有啥意思呢?那还干啥程序员啊!写出“能用”代码的人比比皆是,可是,并非每一个人都能写出“好用”的代码。只会写能用的代码,咱们永远成长不成大牛,成长不成最优秀的那批人。
- 不少工程师写了多年代码,代码功力一点都没长进,编写的代码仍然只是能用便可,能运行就好。平日的工做就是修修补补、抄抄改改,一直在作重复劳动,能力也一直停留在“会干活”的层面,就像高速路上的收银员,只能算是一个“熟练工”。
- “为何要有这种设计原则、思想或者模式?它能解决什么编程问题?有哪些应用场景?又该如何权衡、恰当地在项目中应用?”等等。
思考,回顾,思考,实践
- 不少程序员都已经意识到基础知识的重要性,以为要夯实基础,才能走得更远,但同时对于如何将基础知识转化成开发“生产力”仍然有些疑惑。因此,你可能看了不少基础的书籍,好比
操做系统、组成原理、编译原理
等,但仍是以为很迷茫,以为在开发中用不上,起码在平时的 CRUD 业务开发中用不上。实际上,这些基础的知识确实很难直接转化成开发“生产力”。可是,它能潜移默化地、间接地提升你对技术的理解。设计模式、数据结构、算法
更像是一道儿的,相比那些更加基础的学科,设计模式能更直接地提升你的开发能力
1.应对面试中的设计模式相关问题程序员
- BAT-TMD
- 区分度选项
2.告别写被人吐槽的烂代码面试
- Talk is cheap,show me the code
- 代码能力是一个程序员最基础的能力,是基本功,是展现一个程序员基础素养的最直接的衡量标准
- 你写的代码,实际上就是你名片
- 烂代码,好比命名不规范、类设计不合理、分层不清晰、没有模块化概念、代码结构混乱、高度耦合等等
3.提升复杂代码的设计和开发能力算法
- 如何分层、分模块?
- 应该怎么划分类?
- 每一个类应该具备哪些属性、方法?
- 怎么设计类之间的交互?该用继承仍是组合?
- 该使用接口仍是抽象类?
- 怎样作到解耦、高内聚低耦合?
- 该用单例模式仍是静态方法?
- 用工厂模式建立对象仍是直接 new 出来?
- 如何避免引入设计模式提升扩展性的同时带来的下降可读性问题?
4.让读源码、学框架事半功倍编程
- 优秀的开源项目、框架、中间件,代码量、类的个数都会比较多,类结构、类之间的关系极其复杂,经常调用来调用去。因此,为了保证代码的扩展性、灵活性、可维护性等,代码中会使用到不少设计模式、设计原则或者设计思想。
- 若是你不懂这些设计模式、原则、思想,在看代码的时候,你可能就会琢磨不透做者的设计思路,对于一些很明显的设计思路,你可能要花费不少时间才能参悟。
- 相反,若是你对设计模式、原则、思想很是了解,一眼就能参透做者的设计思路、设计初衷,很快就能够把脑容量释放出来,重点思考其余问题,代码读起来就会变得轻松了。
5.为你的职场发展作铺垫设计模式
- 可维护性
- “代码易维护” 就是指,在不破坏原有代码设计、不引入新的 bug 的状况下,可以快速地修改或者添加代码
- 代码的可读性好、简洁、可扩展性好,就会使得代码易维护
- 更细化地讲,若是代码分层清晰、模块化好、高内聚低耦合、听从基于接口而非实现编程的设计原则等等,那就可能意味着代码易维护
- 可读性
- 看代码是否符合编码规范
- 命名是否达意
- 注释是否详尽
- 函数是否长短合适
- 模块划分是否清晰
- 是否符合高内聚低耦合等等
- 可扩展性
- 代码的可扩展性表示,咱们在不修改或少许修改原有代码的状况下,经过扩展的方式添加新的功能代码。说直白点就是,代码预留了一些
功能扩展点
,你能够把新功能代码,直接插到扩展点上,而不须要由于要添加一个功能而大动干戈,改动大量的原始代码。- 对修改关闭,对扩展开放
- 灵活性
- 若是一段代码易扩展、易复用或者易用,咱们均可以称这段代码写得比较灵活
- 简洁性
- KISS原则(keep it simple stupid)
- 代码简单、逻辑清晰,也就意味着易读、易维护
- 思从深而行之简,用最简单的方法解决最复杂的问题
- 可复用性
- 尽可能
减小重复代码的编写
,复用已有的代码
- 面向对象特性,继承、多态存在的目的之一,就是为了提升代码的可复用性
- 设计原则中的单一职责原则也跟代码的可复用性相关
- 重构技巧,解耦、高内聚、模块化等都能提升代码的可复用性
- 可测试性
- 容易编写单元测试
- 要写出知足多种评价标准的高质量代码,咱们须要掌握一些更加细化、更加能落地的编程方法论,包括
面向对象设计思想、设计原则、设计模式、编码规范、重构技巧
等- 面向对象中的继承、多态能让咱们写出可复用的代码
- 编码规范能让咱们写出可读性好的代码
- 设计原则中的单一职责、DRY、基于接口而非实现、里式替换原则等,可让咱们写出可复用、灵活、可读性好、易扩展、易维护的代码
- 设计模式可让咱们写出易扩展的代码
- 持续重构能够时刻保持代码的可维护性
- 面向对象
- 主流的编程范式或编程风格有三类,面向过程、面向对象、函数式编程
- 7大知识点
- ① 面向对象的四大特性:封装、抽象、继承、多态
- ② 面向对象和面向过程编程的区别和联系
- ③ 面向对象分析,面向对象设计,面向对象编程
- ④ 接口和抽象类的区别以及各自应用场景
- ⑤ 基于接口而非实现编程的设计思想
- ⑥ 多用组合少用继承的设计思想
- ⑦ 面向过程的贫血模式 和 面向对象的充血模式
- 设计原则
- 理解各种设计原则定义、掌握设计初衷、能解决哪些编程问题、有哪些应用场景
- SOLID原则-SRP 单一职权原则
- SOLID原则-OCP 开闭原则
- SOLID原则-LSP 里式替换原则
- SOLID原则-ISP 接口隔离原则
- SOLID原则-DIP 依赖倒置原则
- DRY 原则
- KISS 原则
- YAGNI原则
- LOD 法则
- 设计模式
- 针对软件开发中常常遇到的一些设计问题,总结出的一套解决方案或设计思路,大部分的设计模式要解决的都是代码可拓展性问题
- 23种经典设计模式,分为如下几类
- (1)
建立型
4种经常使用:①单例模式②工厂模式③建造者模式
不经常使用:④原型模式
- (2)
结构型
7种经常使用:⑤代理模式⑥桥接模式⑦装饰者模式⑧适配器模式
不经常使用:⑨门面模式⑩组合模式⑪享元模式
- (3)
行为型
11种经常使用:⑫观察者模式⑬模板模式⑭策略模式⑮职责链模式⑯迭代器模式⑰状态模式
不经常使用:⑱访问者模式⑲备忘录模式⑳命令模式㉑解释器模式㉒中介模式
㉓对象模式
数据结构
- 编程规范
- 代码规范主要解决代码的可读性问题,好比如何给变量、类、函数命名、如何写代码注释等问题
- 《重构代码大全》《代码整洁之道》
- 此处总结20条规范
- 代码重构
- 重构的目的(why)、对象(what)、时机(when)、方法(how)
- 保证重构不出错的技术手段:单元测试和代码的可测试性
- 两种不一样规范的重构:大重构(大规模高层次)、小重构(小规模低层次)
- 五者之间联系
- 面向对象编程,由于具备丰富的特性(封装、抽象、继承、多态),能够实现不少复杂的设计思路,是不少设计原则、设计模式等编码实现的
基础
。- 设计原则是指导咱们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具备
指导意义
。好比,“开闭原则”是不少设计模式(策略、模板等)的指导原则- 设计模式是针对软件开发中常常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式的主要目的是提升代码的可扩展性。从抽象程度上来说,
设计原则比设计模式更抽象。设计模式更加具体、更加可执行
- 编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。持续的小重构依赖的
理论基础
主要就是编程规范- 重构做为保持代码质量不降低的有效手段,
利用
的就是面向对象、设计原则、设计模式、编码规范这些理论