一、设计模式导读
1. 为什么要尽快学习设计模式?
聊一聊你对设计模式相关知识的重要性的看法?
(1)应对面试中设计模式相关的问题
(2)告别写出被别人吐槽的烂代码
(3)提高复杂系统的设计和开发能力
(4)读源码、学框架事半功倍
(5)为职场长远的发展作铺垫
在你过往的项目开发中,有没有用过某种设计模式?是在什么场景下应用的?解决了什么问题?
2. 从哪些维度评判代码质量的好坏?
2.1 如何评价代码质量的高低?
多个维度评价代码质量的高低,这些维度之间并不是互相独立的,不能通过单一的维度去评价一段代码的好坏
2.2 最常用的评价标准有哪几个?
可读性、可扩展性、可维护性、简洁、灵活、易复用、可测试性。其中,最重要的是可读性、可扩展性、可维护性
2.3 如何才能写出高质量的代码?
掌握一些更加细化、更加具体化的编程方法论,这就包括面向对象的设计思想、设计原则、设计模式、编程规范、重构技巧
3. 面向对象/设计原则/设计模式/编程规范/重构,这5者之间的关系?
(1)面向对象编程因为其丰富的特性(封装、抽象、继承、多态),可实现许多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础;
(2)设计原则是指导代码设计的一些经验总结
(3)设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。应用设计模式主要目的是解决代码的可扩展性,从抽象程度上来讲,设计原则比设计模式更加抽象;设计模式更加具体,更加可执行
(4)编程规范主要解决的是代码可读性问题
(5)重构作为保持代码质量的有效手段
二、设计原则与思想:面向对象
4. 当我们在谈论面向对象时候,我们到底在谈论什么?
什么是面向对象编程,什么是面向对象编程语言?
面向对象编程是一种编程范式或者说编程风格,以类或者对象作为组织代码的基本单元。并以4大特性(封装、抽象、继承、多态)作为代码设计和实现的基石。
面线对象编程语言是支持类或者对象的语法机制,并有现成的语法机制,能方便的实现面向对象4大特性的编程语言
5. 封装/继承/抽象/多态分别可以解决哪些问题?
(1)封装也就是信息保护、数据访问保护,需要编程语言提供特定的语法支持,例如C++语言提供的关键子private,protect,public关键字。封装特性的意义,保护数据不被随意访问,提高代码的可维护性,仅暴露有限的必要接口,提高类的易用性。
(2)抽象是隐藏方法的具体实现,让使用者只需要知道方法提供了哪些功能,不需要特殊的语法机制来支持。抽象的意义,一方面是提高代码的可扩展性、可维护性,修改实现需要改变定义,减少代码的改动范围,另外一方面,它也是处理复杂系统的有效手段,能有效过滤掉不必要关注的信息。
(3)继承用来表示类之间的is a关系,分单继承和多继承,需要编程语言提供特殊的语法机制来支持,继承主要用来解决代码复用的问题。
(4)多态指的是子类代替父类,在实际的代码运行过程中,调用子类的代码实现。多态需要特殊的语法机制来支持,主要比如继承、接口类,多态可以提高代码的可扩展性和可复用性,是很多设计模式、设计原则、编程技巧的代码实现基础