设计模式

37 阅读1分钟

1. 单例模式

  1. 所有的设计模式都为了解决某一类问题,并不是所有问题都能解决

  2. 有一个类(构造函数)他的一生,只会创建一个实例化度对象

class First{
  constructor(){
    console.log('输出了一句话')
  }
}
let fir = null
function f1(){
  if(fir === null){
    fir = new First
  }
  return fir
}
let a = f1()
let b = f1() // 这个b和上面的a是一个实例化对象因为只有在new的时候才会在控制台打印这句话所以这个不会打印
console.log(a === b)
  1. 存在的问题: * 在全局有一个变量 * 实例化的时候无法多次传参 * class类名字与函数的名字不同 js let First = (function(){ class First{ constructor(){ this.name = '' console.log('输出了一句话') } Name(rse){ name = res } } let s = null return function(res){ if(s === null){ s = new First() } s.name = res return s } })() let a = new First('张三') // 这个new因为函数返回的是一个复杂数据类型所以这个new加不加要不要看做成自定义函数都可以的 console.log(a) let b = First('李四') // 这个b和上面的a是一个实例化对象因为只有在new的时候才会在控制台打印这句话所以这个不会打印 console.log(b) console.log(a === b)

2. 策略模式

  1. 核心:减少if...else分支

  2. 在JS中所有引用数据类型都可以当做对象来使用

3. 发布订阅模式

  1. 用于大型项目封装(框架)

  2. 订阅模式/观察者模式

4. 数组扁平化

  1. 定义:将一个多维数组转化为一维数组