工厂模式
工厂模式就是用来批量生产对象的
js代码:
class People{ //工厂 constructor(name,age) {//原材料 this.name = name this.age = age this.init() } init(){//进行加工 console.log(this.name,this.age) } } let People1 = new People('张三',20) //创建第一个实例 let People2 = new People('李四',22) //创建第二个实例 console.log(People1.constructor === People2.constructor)//true 都来自一个工厂
单例模式
只允许存在一个实例
js代码:
class People { constructor(name, age) { this.name = name this.age = age } } let danli = (()=>{//使用闭包实现单例 let obj = new People('张三',20) return ()=>{ return obj } })() let People1 = danli() //创建实例1 let People2 = danli() //创建实例2 console.log(People1) //People {name: "张三", age: 20} console.log(People2) //People {name: "张三", age: 20} console.log(People1.constructor === People2.constructor) //true
观察者模式
又称发布订阅者模式,案例 ---- 事件监听,一个元素绑定多个同类型事件,元素是被观察者(发布者),而绑定的事件就是观察者(订阅者),当被观察者状态发生改变,被观察者随之改变
js代码:
//这里document就是被观察者(发布者) document.addEventListener('click',()=>{ //观察者(订阅者) console.log(1) }) document.addEventListener('click',()=>{ //观察者(订阅者) console.log(1) }) document.addEventListener('click',()=>{ //观察者(订阅者) console.log(1) }) document.addEventListener('click',()=>{ //观察者(订阅者) console.log(1) }) //当被观察者状态发生改变时,观察者状态也随之改变
策略模式
定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换,从而避免使用很多if语句
比如公司的年终奖是根据员工的工资和绩效来考核的,绩效为A的人,年终奖为工资的4倍,绩效为B的人,年终奖为工资的3倍,绩效为C的人,年终奖为工资的2倍(摘自网络案例)
js代码:
let obj = { //封装算法 a:(pic)=>{ return pic*4 }, b:(pic)=>{ return pic*3 }, c:(pic)=>{ return pic*2 } } let obj1 = (o,pic)=>{ return obj[o](pic) } console.log(obj1('b',3000)) //9000 console.log(obj1('a',5000)) //20000