设计模式

91 阅读3分钟

此章主讲设计模式的学习,有一个前提重点,就是不要为了需要而需要,没必要使用设计模式的时候不需要硬套,接下来介绍几个前端设计中比较常用的

1. 工厂模式

工厂模式在前端中分为简单工厂和复杂工厂,但是涵盖意义相差不大 应用场景: 当你需要大量产出类似对象的时候,就需要工厂模式进行优化最佳实践: jquery(其实不算是,这个更像是单例模式优势:

  1. 工厂类包含必要的逻辑判断,可以决定在什么时候创建哪一个产品的实例。客户端可以免除直接创建产品对象的职责,很方便的创建出相应的产品。工厂和产品的职责区分明确。

  2. 客户端无需知道所创建具体产品的类名,只需知道参数即可。

  3. 也可以引入配置文件,在不修改客户端代码的情况下更换和添加新的具体产品类。# 2. 建造者模式 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 应用场景: 当你需要创建一个功能庞大,多开发者的时候,需要使用,分开,独立建设,然后合并最佳实践: 柯理化函数;vue, vue 实例的方法实际上代码不多,实例上的大量属性方法,都是通过其他 mixin 方法挂上去的优势:

  4. 封装性好,构建和表示分离。

  5. 扩展性好,各个具体的建造者相互独立,有利于系统的解耦。

  6. 客户端不必知道产品内部组成的细节,建造者可以对创建过程逐步细化,而不对其它模块产生任何影响,便于控制细节风险。# 3. 函数式编程 函数式编程,即将整个需求(项目)拆分一个个独立的纯函数应用场景: 为团队造轮子的时候最佳实践: react 的 hooks实际上,市面上大部分的主流框架也在寻求使用函数式变成来改造项目,例如 react 的 hooks,vue4 等优势其实可以一言蔽之: 组合优于继承

  7. 组合思想,灵活,可拓展性和复用性会比对象模式要更好

  8. tree-shaking 的支持,(一个删除无用代码的神器,具体原理可百度一下,大概就是从 export 出的文档流中判断)# 4. 观察订阅者模式 是我们经常接触到的设计模式,日常生活中的应用也比比皆是,比如你订阅了某个博主的频道,当有内容更新时会收到推送;又比如JavaScript中的事件订阅响应机制。观察者模式的思想用一句话描述就是:被观察对象(subject)维护一组观察者(observer),当被观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者应用场景: 需要进行数据响应,或者需要进行数据跨级别分发的时候 最佳实践: redux等公共状态管理(eventhub);事件驱动 优势:

  9. 建立一套触发机制

  10. 观察者和被观察者是抽象耦合的。