Shinkai005

V1

2022/04/19阅读:19主题:红绯

白话设计模式

白话设计模式

《秒懂设计模式》这本书,从面向对象编程,面向对象三大特性的理论基础开篇,然后系统讲解了单例、原型、工厂方法、抽象工厂、建造者、门面、组合、装饰器、适配器、享元、代理、桥接、模板方法、迭代器、责任链、策略、状态、备忘录、中介、命令、访问者、观察者以及解释器等23中设计模式的概念及结构,最后以六大设计原则收尾。

吸引我的点主要在理论和现实的结合,把抽象事物具体化。很不错~

设计模式啥子用?

在编程界有这样一种现象,有一些人认为代码量代表着业务的复杂程度,其实不然~

想到哪里写到哪里的编程方式,缺乏软件架构的大局观,最终很容易让系统中充斥着大量的冗余代码。

缺乏模块化的设计,更谈不上代码的复用性了(无法抽离)。代码量大从来代表不了一个系统有多么复杂,更不能代表一个程序员有多么优秀或者努力~;

反之作为一个有思想高度的开发者一定要培养"偷懒"意识,想发设法用最少的代码来实现最强的功能(求解即可~不用最优)。

设计模式主要研究的是“变”与“不变”,以及如何将他们分离解耦组装将其中不变的部分沉淀下来,避免“重复造轮子”;

而对于变的部分,则可以用抽象化、多态化的方式增强其兼容性和可扩展性。

这个时候脑海里要有个框架~什么是好的代码?好的系统? 各个功能之间独立,易迭代,模块性强....

设计模式没有那么难~广义上来说,设计模式不是一种技术而是**一种思想,**一种比较通用的思想,不管是在业务还是算法领域~

不需要完全弄懂其的诞生,只要脑海中理解了每种设计模式那么就会潜移默化的影响你的日常编程.

书是Java的我尽力用js写笔记~

面向对象三大特性

面向对象三大特性是"封装"、“继承”、“多态”。

封装

什么是封装? 胶囊对于混合药物的封装,钱包对于钱、身份证、会员卡的封装,计算机主机对于主板、CPU、内存条等配件的封装

这本书的特色就是用现实中常见的内容,过渡到互联网相关领域.

image-20220418222016074
image-20220418222016074

封装在我们生活中无处不在,杯子隐藏了杯子内部的饮料,然后只留一个孔用来插吸管,这就是封装. 只留有一个接口api用来访问

这里封装的原因是因为,零散的数据缺乏集中管理,难以整体引用读取

我们在用吸管(api接口)喝饮料时,不需要关心内部对象和工作机制:如何降温的,如何用习惯吸出可乐这些我们是不需要了解,或者不了解也不会影响我们的目的,喝可乐~这就是封装的一个目的.简单,偷懒

最后记得~在日常代码封装过程中,"物极必反过犹不及" 要把同类型相关的对象封装在一起~一定要有依据的去封装而不是全凭个人主观想法,一定要适度.

继承

继承的主要目的我们先不说,大家设想如果没有继承怎么办?

每个子类都需要写父类的可延续的属性方法~ 代码量会线性增加并且难以维护修改

设想我们想要更改所有的同类属性,有多少个子类就需要改多少~这工作量太恐怖了

得出继承设计的目的---让父类的属性和方法延续到子类中,这样就不需要重复定义,然后子类想要更改的话,可以直接修改继承来的方法属性,来实现功能扩展和追加属性。

例子是生物的遗传~不展开说了

比较简单代码也不想写~,摆烂~

多态

我是以js-弱类型语言开始接触编程的~so 多态其实理解的并不好.

多态本身是对于强类型语言,Java,c++,c#等,他们通常采用"抽象类"or"接口" 来进行更高一层次的"抽象",从而直接使用这个抽象。本质上是为了弱化具体类型,用一个“抽象”来代替N种具体实现。

而对于js这种本身就是弱类型的语言来说,多态是与生俱来的,根本不需要这个概念~

我这里的一个可能错误的理解是~ 比如浮点型,双精读浮点型... 在js中就直接抽象成了number~js的数据类型本身就不是强类型。

这里说一下强弱类型的区别在于:

强类型是在没有强制转换数据类型前不可以进行不同类型变量之间的操作;

弱类型就不一样了,弱类型可以将不同类型的变量进行操作比如1+"1"==="11",有隐式转换~

多态的实现其实需要利用继承或者"接口实现",比如世间各种食材,虽然种类繁多,但是万变不离其宗,可以抽象出来一个有机食物(食物类),或者人类不能吃的(金属类)

可以这样理解,就是对比较具象的事物再次划分类,也就是抽象化

人--> 张三李四-> 职业电竞选手

这就属于一个在抽象~从而引用一类人~多态也是为了使用一系列数据的.

分类:

前端

标签:

Node.js

作者介绍

Shinkai005
V1

公众号:深海笔记Shinkai