美文网首页
js中的单例模式

js中的单例模式

作者: jie_zhao | 来源:发表于2019-07-23 23:16 被阅读0次

单例模式(Singleton Pattern):把一堆代码放入一个逻辑单元,可通过一个单一的变量来访问。最大的好处是封装代码,减少全局变量。

// 原始写法,全局变量多,难以维护

let btn = document.querySelector("#btn")
let div = document.querySelector("#div")
btn.onclick = function () {
    let node = document.createElement("div")
    node.innerText = "hello world"
    div.appendChild(node)
}

// 用单例模式,把一坨代码代码整合到一个对象里,作为它的属性和方法。只保留一个全局变量,通过预留的“入口”启动

let app = {
    init: function () {
        this.btn = document.querySelector("#btn")
        this.div = document.querySelector("#div")
        this.bind()
    },
    bind: function () {
        let _this = this
        this.btn.onclick = function () {
            _this.render()
        }
    },
    render: function () {
        let node = document.createElement("div")
        node.innerText = "hello world"
        this.div.appendChild(node)
    }
}
app.init()

// 使用闭包,来隐藏部分不需要暴露的变量,只暴露出init方法。这种特殊的单例模式也叫模块模式(module pattern)

let app = (function () {
    let btn = document.querySelector("#btn")
    let div = document.querySelector("#div")
    function bind() {
        btn.onclick = function () { render() }
    }
    function render() {
        let node = document.createElement("div")
        node.innerText = "hello world"
        div.appendChild(node)
    }
    return {
        init: function () { bind() }
    }
})()
app.init()

// 这里对其进行一下改进,不立即创建实例,等需要的时候再创建

let Singleton = (function () {
    let instance
    function createInstance() {
        let btn = document.querySelector("#btn")
        let div = document.querySelector("#div")
        function bind() {
            btn.onclick = function () { render() }
        }
        function render() {
            let node = document.createElement("div")
            node.innerText = "hello world"
            div.appendChild(node)
        }
        return { init: function () { bind() } }
    }
    return {
        getInstance: function () {
            if (!instance) { instance = createInstance() }
            return instance
        }
    }
})()
let single = Singleton.getInstance()
single.init()

相关文章

  • 前端开发工程师必备系列-几个简单的JS单例模式

    前端开发工程师必备系列-几个简单的JS单例模式 JavaScript单例模式 1. 单例模式 单例模式(Singl...

  • js中单例模式

    只存在一个实例

  • chrome中的单例模式

    chrome中的单例模式chrome中的单例模式

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • js中的开发模式

    js中的开发模式进化史: js中有最初的只能由基本数据类型描述——》单例模式--》工厂模式--》构造函数模式--》...

  • js中的单例模式

    单例模式(Singleton Pattern):把一堆代码放入一个逻辑单元,可通过一个单一的变量来访问。最大的好处...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 单例模式

    一、实现单例模式 或者 二、透明的单例模式 三、用代理实现单例模式 四、JavaScript中的单例模式 在Jav...

  • Java四种单例设计模式

    Java中的四种单例模式 单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。 1.基本单例模式...

网友评论

      本文标题:js中的单例模式

      本文链接:https://www.haomeiwen.com/subject/mopzlctx.html