js - 1.设计模式

一、工厂模式

使用场景:
	1. jQuery中只有一个$
	2. react 中的reactElement()方法
	
class jQuery  {
    constructor(selector) {
        this.selector = selector
    }
    css() {
        console.log('css 操作')
    }
}

window.$ = function(selector) {
    return new jQuery(selector)  // 这里就是工厂,外部调用不用知道jQuery的实现
}
$('body').css()

二、单例模式

// 单例模式:只能实例化一个对象,例子中是在getInstance中实例化,其他地方就不需要调用
class LoginForm {
    constructor() {
        this.state = true
    }
    show() {
        if(this.state) {
            console.log('已经显示了')
            return
        }
        this.state = true
        console.log('显示成功')
    }
    hide() {
        if(!this.state) {
            console.log('已经隐藏')
            return
        }
        this.state = false
        console.log('隐藏成功')
    }
}
LoginForm.getInstance = (function() {
    let instance
    return function() {
        if(!instance) {
            instance = new LoginForm()
        }
        return instance
    }
})()

let a1 = LoginForm.getInstance()
a1.show()
let a2 = LoginForm.getInstance()
a2.hide()

三、适配器模式

使用场景
	1. 封装旧接口
	2. vue compputed属性

class Adaptee {
    sRequest() {
        return '德国插头标准'
    }
}
class Target {
    constructor() {
        this.adaptee = new Adaptee()
    }
    request() {
        let info = this.adaptee.sRequest()
        return `${info} 转换为 中国插头标准`
    }
}
let target = new Target()
console.log(target.request())

四、装饰器模式

1. 第三方库:core-decorators(https://github.com/jayphelps/core-decorators)
2. 为对象添加新功能,不改变其原有的结构和功能
3. 例子:https://blog.csdn.net/zhuanyemanong/article/details/86661495
4. 例子:https://www.jianshu.com/p/398f0e8f2699
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值