设计
设计 即 按照哪一种思路或者标准来实现功能。
功能相同,可以有不同设计方案来实现,伴随着需求增加 设计的作用才能体现出来。
《UNIX/LINUX设计哲学》
准则1:小即是美
准则2:让每个程序只做好一件事
准则3:快速建立原型(快速完成基本效果,后续在慢慢迭代)
准则4:舍弃高效率而取可移植性
准则5:采用纯文本来存储数据(人可以读取文本,采用二进制存储数据更快,但是没有可读性)
准则6:充分利用软件的杠杆效应(软件复用)
准则7:使用 shell 脚本来提高杠杆效应和可移植性
准则8:避免强制性的用户界面
准则9:让每个程序都称为过滤器(就比如 中间件,每个程序只做一件事情)
小准则:允许用户定制环境;尽量使操作系统内核小而轻量化;使用小写字母并简写;沉默是金;各部分之和大于整体;寻求 90%的解决方案
五大设计原则
SOLID 五大设计原则
S - 单一职责原则
一个程序只做好一件事;
如果功能过于复杂就拆分开,每个部分保持独立。
单一职责原则的实现方法:单一职责原则是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中。而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。
O - 开放封闭原则
对扩展开放,对修改封闭;
增加需求时,扩展新代码,而非修改已有代码;
这是软件设计的终极目标。
开闭原则的实现方法: 可以通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。
L - 里氏置换原则
子类能覆盖父类;
父类能出现的地方子类就能出现;
里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
JS中使用较少(弱类型 & 继承使用较少)。
I - 接口独立原则
保持接口的单一独立,避免出现 ' 胖接口 '(还是每一个程序只做一件事);
JS 中没有接口(Typescript 例外),使用较少;
类似于单一职责原则,这里更关注接口。
D - 依赖倒置原则
面向接口编程,依赖于抽象而不依赖于具体;
使用方只关注接口而不关注具体类的实现;
JS 中使用较少(弱类型 & 没有接口)。
注意:在 JS 中 SO 体现较多,LID 体现较少
示例 :用 Promise 来说明 SO
单一职责原则:每个 then 中的逻辑只做好一件事;
开放封闭原则: 如果新增需求,扩展 then。
模式
23种 设计模式 分为三大类型:
创建型:工厂模式、单例模式、原型模式,抽象工厂模式,建造者模式;
结构型:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式;
行为型:策略模式、模板方法模式、观察者模式、迭代器模式、职责连模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
总结
每种模式 都是 根据 设计原则 中的某些准则 而产生的解决方案或者思路, 需要充分理解 设计原则,进而更好的理解每种模式。
网友评论