在学习js课程中,有部分章节讲到设计模式,本笔记大部分内容来自此课程,为了加深印象,结合课程写一写自己的理解。(作为初学者,可能有些理解错误,仅做参考)
本笔记包含两方面:学习前后的理解对比。
一,在未了解这方面的知识之前:
如果有问题①:设计一门语言或者框架需要考虑哪些问题?
我的出发点会是问题②:为什么有这种需要,以前或现有的不好吗?
我认为思考问题②的答案会更加直观的解决问题①,比如:现有的实现一个功能很麻烦、代码冗余;新需求的出现让原有的失去针对性;复杂的语法、费劲的格式很不友好;编译、执行的效率有待提高。那么目标就看似明确了——语法简单,格式清爽,易读,学习曲线平缓,有针对性,write less do more,执行效率高... 说到底最求的只有一个目标——省事!
省事是一个很抽象的东西,纯粹的去了解抽象的东西很伤脑筋,因为没有具体的实现会让人云里雾里,但是同样,在学习一些编程语言或者框架的时候,会被一些语法,各种调用搞得很烦,这些很具体的细节有时也一样伤脑筋。因此去了解它的设计模式——抽象的,实现——具象的,两者都很重要。然而设计模式大同,必然它的实现也会大同,不同的只是表现出来的形式,因此对一些东西纠结与否,只须考虑它的不同之处,我们自顶向下的学习,当理解了这样做的目的是什么,很多东西也可不必深究(我在大多数时候,都用“这样做省事”来回答自己心中的疑问,因此,去深入了解一下到底是怎么省事的,会让自己脑子更加清晰)
二,学习的笔记以及新的理解:
一,设计模式(design pattern)的目的:让代码可重用;可扩展;可解耦;易理解。
二,设计原则(目的就是需求,而原则就是不可违背(迎合)需求的规矩吧)。
①开闭原则:对扩展开放,对修改关闭(前者是为了可扩展功能,后者应该是对安全性、稳定性考虑)。
②里氏转换原则:子类继承父类,单独后可运行(达到代码可重用目的)
③依赖倒转原则:引用一个对象,如果其有底层类型,直接应用底层(减少了不必要的步骤,直白的省事)。
④接口隔离原则:每一个接口应该是一种角色(明确功能,便于维护,易理解)。
⑤合成/聚合复用原则:新的对象应使用一些已有的对象,使之成为新对象的一部分(新的对象永远是在已有对象的基础上做扩展,功能更多)
⑥迪米特原则:一个对象应对其他对象有尽可能少的了解(设计的时候有明确的界限,使用的时候可以只专注当前功能的实现,对象之间互不干扰)
ps:诸多概念还是云里雾里,但是以后在开发过程中,把遇到的问题与上面的原则一一对应起来去理解,希望能有更清晰的认识吧!括号内是自己目前的理解,如有错误,感谢指正!