设计模式

构造函数模式--Constructor

核心

1.将属性绑到this上 2.将方法绑到到prototype上 3.使用new来新增实例【创建不同的引用类型】

function People(){
  this.name='李顺心'
}
People.prototype.walk =function(){
   console.log('walk')
}
let xiannv = new People()

工厂模式

核心

1.return一个对象 2.创建不同的引用类型

function createPerson(){
   let person={
   name:'人',
walk:function(){
 console.log('walk')
}
}
return person//返回一个对象
}
let xiannv = createPerson()//工厂生产对象

单例模式---simble

核心

1、生产一个类的唯一实习 2.节约内存

function createPeople(){
   let name
return function(userName){
    return name||{name =userName}
}
}
let single =createPeple()
console.log(single('李顺心'))//不管再传递任何值  只会返回李顺心

模块模式

核心

常常使用闭包的形式来实现

let Person = (function () {
    let name = '小明'
    function sayName() {
        console.log(name)
    }

    return {
        name: name,
        sayName: sayName
    }
})()

发布订阅模式---Publish/Subscribe

核心

`

let EventCenter = (function () {
    let events = {}

    function on(evt, handler) {
        // 实现监听效果

        // 使用'或'是为了可以对同一个事件多次进行回调
        events[evt] = events[evt] || []
        events[evt].push({
            handler: handler
        })
    }

    function fire(evt, args) {
        if (!events[evt]) {
            // 如果未监听任何事件,直接中断
            return
        }
        for (let i = 0; i < events[evt].length; i++) {
            // 遍历,实现对同一个事件的多次回调
            events[evt][i].handler(args)
        }
    }

    function off(name) {
        delete events[name]
    }

    return {
        on: on, // 订阅者
        fire: fire, // 发布者
        off: off // 取消订阅
    }
})()

EventCenter.on('hello', function (num) {
    console.log(num)
})
EventCenter.on('hello', function (num) {
    console.log(num)
})

EventCenter.fire('hello', 1) // 1[出现两次]

你可能感兴趣的:(设计模式)