zoukankan      html  css  js  c++  java
  • JavaScript设计模式_01_单例模式

    最近项目不太忙,难得有时间看看书,平时挺喜欢js这门语言。也看过很多高级教程,觉得自己还是比较热衷于js的设计模式。这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。

    /**
     * pre 单例模式
     * 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
     * 应用:单例模式是一种常用的模式,有一些对象我们往往只需要一个,
     * 比如线程池、全局缓存、浏览器中的 window 对象等。
     */
    //--------------singleton-01-------------
    /*写法1*/
    var Singleton = function(name){
        this.name = name;
        this.instance = null;
    };
    
    Singleton.prototype.getName = function(){
        alert(this.name);
    };
    
    Singleton.getInstance = function(){
        if(!this.instance){
            this.instance = new Singleton(name);
        }
        return this.instance;
    };
    
    var a = Singleton.getInstance("amy");
    var b = Singleton.getInstance("ben");
    alert(a === b);
    
    // ------------singleton-02----------------
    /*写法2*/
    var Singleton = function(name){
        this.name = name;
    }
    Singleton.prototype.getName = function(){
        return this.name;
    }
    
    Singleton.getInstance = (function(){
        var instance = null;
        return function(name){
            if(!instance){
                instance = new Singleton(name);
            }
            return instance;
        }
    })();
    
    var a = Singleton.getInstance("amy");
    var b = Singleton.getInstance("ben");
    alert(a === b);
    
    // ------------singleton03-----------
    /*写法3*/
    var Singleton = (function(){
        var instance;
        return function(name){
            if(instance){
                return instance;
            }
            this.name = name;
            instance = this;
        }
    })();
    var a = new Singleton("amy");
    var b = new Singleton("ben");
    alert(a === b);
    
    //---------------- 示例  ---------------
    var getSingleton = function(fn) {
        var result;
        return function() {
            if(!result) {
                result = fn.apply(this, arguments);
            }
            return result;
        }
    };
    
    var getSingletonVip = (function() {
        var instance;
        return function(fn) {
            return instance || (instance = fn.apply(this, arguments));
        }
    })();
    
    var createLoginUser = function() {
        var div = document.createElement("div");
        div.innerHTML = '这是登录框';
        document.body.appendChild(div);
        return div;
    };
    
    var createInfoGrid = function() {
        var div = document.createElement("div");
        div.innerHTML = '这是列表信息框';
        document.body.appendChild(div);
        return div;
    };
    //--执行getSingleton
    var createUserDiv = getSingleton(createLoginUser);
    createUserDiv();
    createUserDiv();
    
    //--执行getSingletonVip
    getSingletonVip(createLoginUser);
    getSingletonVip(createLoginUser);
  • 相关阅读:
    mysql如何修改密码,root密码忘记怎么办?
    杂碎知识点
    mysql的数据类型4---字符串类型
    mysql的数据类型3---日期与时间类型
    mysql的数据类型1---浮点和定点类型
    mysql的数据类型1---整数类型
    安卓学习简记:基础知识(一)
    使用eclipse学习java第三课
    使用eclipse学习java第二课
    一些C和C++的常见问题集锦 ----不停更新
  • 原文地址:https://www.cnblogs.com/stinchan/p/6970592.html
Copyright © 2011-2022 走看看