JavaScript常见设计模式【简短、通俗易懂】

道:

​ 核心思想:封装变化—— 将变与不变分离,确保变化的部分灵活、不变的部分稳定

​ SOLID设计原则:

​ - 单一功能原则(Single Responsibility Principle)【前端着重】

​ - 开放封闭原则(Opened Closed Principle)【前端着重】:对拓展开放,对修改封闭。软件实体(类、模块、函数)可以扩展,但是不可修改

​ - 里式替换原则(Liskov Substitution Principle)

​ - 接口隔离原则(Interface Segregation Principle)

​ - 依赖反转原则(Dependency Inversion Principle)

术:

  • 创建型模式封装了创建对象过程中的变化,比如下节的工厂模式,它做的事情就是将创建对象的过程抽离;
  • 结构型模式封装的是对象之间组合方式的变化,目的在于灵活地表达对象间的配合与依赖关系;
  • 行为型模式则将是对象千变万化的行为进行抽离,确保我们能够更安全、更方便地对行为进行更改。

一、创建型:

  1. 简单工厂模式:将创建对象的过程单独封装。处理的对象是一些简单的类——它们的共性容易抽离,同时因为逻辑本身比较简单,故而不苛求代码可扩展性。

应用场景:有构造函数的地方,我们就应该想到简单工厂;在写了大量构造函数、调用了大量的 new、自觉非常不爽的情况下,我们就应该思考是不是可以掏出工厂模式重构我们的代码了。

  1. 抽象工厂模式【前端不适用】:处理的是一帮非常棘手、繁杂的类,这些类中不仅能划分出门派【抽象、具体】,还能划分出等级【工厂、产品】,同时存在着千变万化的扩展可能性——这使得我们必须对共性作更特别的处理、使用抽象类去降低扩展的成本,同时需要对类的性质作划分。一般会分为以下四种类型:

较好的阐述了- 开放封闭原则:对拓展开放【可继承抽象类形成新的构造类】,对修改封闭【抽象类中共性方法】。

  • 抽象工厂: 用于声明最终目标产品的共性。
  • 具体工厂:继承自抽象工厂、实现了抽象工厂里声明的那些方法,用于创建多个具体的产品,汇总成最终产品的类。
  • 抽象产品:单个具体产品的共性。
  • 具体产品:继承自抽象产品,实现了抽象产品里声明的那些方法,用于创建单个具体产品的类。
  1. 单例模式:核心:getInstance方法、instance变量、闭包 / 静态实现。类似Storage、全局唯一模态框。

二、结构型:

  1. 装饰器模式:在不改变原对象的基础上,通过对其进行包装拓展,使原有对象可以满足用户的更复杂需求。eg:ES6+装饰器语法、react高阶组件、redux的connect、core-decorators库

  2. 适配器模式:(1)设计接口时保证入參和出參的統一:前者保证了用户在传递参数时的统一性和便捷性(坏的case就是用户需要指明当前的环境以及对应的参数),后者保证了后续操作的一致性。总之就是【复杂的,需要配适的】留给自己去封装,用户需要传递信息越少越好,傻瓜式操作即可。(2)新接口对旧接口的兼容适配。

  3. 代理模式: A 不能直接访问 B,A 需要借助一个帮手来访问 B,这个帮手就是代理器。这个帮手可能是想要 隐藏B【通过设置set、get等】更快捷的获取B【缓存】统一处理同一类行为【事件代理】等。

三、行为型

  1. 观察者模式: 发布者直接通知到订阅者【vue响应式】
  2. 订阅发布模式:发布者不直接触及到订阅者、而是由统一的第三方来完成实际的通信的操作【bus总线】
  3. 迭代器模式:针对不同数据结构的一套统一接口遍历机制【ES6 Iterator统一接口Symbol.iterator属性

参考自掘金小册修言的设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值