失业了,但不影响我写几个【设计模式】

200 阅读4分钟

前言

2023年一月经历了裁员,恰好赶上我的宝宝出生,找工作的事情一拖就是三个月。最近开始陆陆续续的面试,感受到了寒意。为了对抗焦虑,我开始总结自己的过往经历,梳理知识体系。相信一切都有最好的安排。
ts示例代码仓库,示例都是鸡啊鸭啊这种小动物,好理解。

设计原则

  • 单一职责原则(SRP) —— 一个类应该只有一个发生变化的原因
  • 开放封闭原则(OCP) —— 对扩展开放,对修改封闭
  • 里氏替换原则(LSP) —— 派生类(子类)对象可以在程式中代替其基类(超类)对象
  • 接口隔离原则(ISP)—— 客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上
  • 依赖倒置原则(DIP)—— 程序要依赖于抽象接口,不要依赖于具体实现
  • 最少知识原则(LKP)—— 一个软件实体应当尽可能少的与其他实体发生相互作用

设计模式

单例模式

定义

一个ts示例

简单实用的模式,保证一个类仅有一个实例。比如说前端要实现一个全局弹窗,这就很适合。

简单工厂模式

定义

一个ts示例

简单实用的模式,封装了对象创建的过程,js中Promise.all和race这些都是工厂方法,使用起来很方便。

工厂方法模式

定义

一个ts示例

工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。跟简单工厂相比,它更符合开放封闭原则。

抽象工厂模式

定义

一个ts示例

相比于工厂方法模式,抽象工厂模式更适合创建“不同系列”的“相关”产品。
例子中的“老李家”和“老薛家”就是“不同的系列”,不同系列可能有各自的属性和方法,但是他们又是“相关”的。

建造者模式/生成器模式

定义

一个ts示例

将一个“复杂对象”的构建与它的表示分离。注意是复杂的,不复杂的真没必要用这个模式。

适配器模式

定义

一个ts示例

将一个类的接口适配成用户所期待的(例子中将接口方法run是配成了move)。

桥接模式

定义

一个ts示例

桥接模式是将抽象部分(例子中的move)与它的实现部分(例子中的step)分离,使它们都可以独立地变化。

组合模式

定义

一个ts示例

将对象组合成“树型结构”,使得用户对单个对象和组合对象的使用具有一致性。组合模式比较典型的应用是文件系统。

装饰器模式

定义

一个ts示例

装饰器模式为了动态的给类扩展功能。比如游戏中给角色换肤,可以看看这里怎么给角色换肤

外观模式

定义

一个ts示例

前端有关比较好的场景是cli工具,上面的例子是一个cli的伪代码。

享元模式

定义

一个ts示例

这是一种优化性能的模式。英文Flyweight中的Fly是代表苍蝇,意为蝇量级。所以这个模式核心是:运用共享技术来支持大量细粒度的对象。

代理模式

定义

一个ts示例

可以为对象提供一个代用品和占位符,以便控制对其的访问。ES6中的Proxy能很轻松的实现一个代理模式。