zoukankan      html  css  js  c++  java
  • Javascript设计模式学习二(单例)

    定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点

    普通的单例模式:
      使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象。
    比如:使用一个变量instance标记是否创建了这个类对象,现在需要用到一个Single类,先判断instance是否为null,若不是则直接return返回,若是则new Singleton();

    var instance = null;
    return function(){
        if(!instance){
            instance = new Singleton();
        }
        return instance;
    }

    JavaScript中,我们经常会把全局变量当成单例来使用,但全局变量容易造成命名空间污染,使用命名空间可以减少全局变量的数量。

    我们常在管理命名空间时使用单例模式,它可以降低你在代码中创建全局变量的数量。

    惰性单例:在需要的时候才创建对象实例。(非常有用)
    通用的惰性单例:
      首先是管理单例逻辑封装在getSingle中,创建对象的方法fn被当作参数动态传入

    var getSingle = function(fn){
        var result;
        return function(){
            return result || (result = fn.apply(this,arguments));
        }
    };

    fn可以是创建弹窗的方法createDialog或者其他方法,传入getSingle后,返回一个新的函数,并且用一个变量result保存fn的结果,因为result在闭包中,所以它永远不会被销毁,如果result已经被赋值,那么它将返回这个值。

    var createDialog = function(){
        //创建Dialog代码
    }
    document.getElementById("btn").onclick = function(){
        var dialogLayer = getSingle(createDialog);//这样创建好Dialog了
    }

    把创建实例对象和管理对象分别放置在两个方法里,这两个方法可以独立变化而互不影响,减低耦合。这两个方法组合起来才具有单例模式的神奇作用
    这种单例模式的用途不止创建对象,可以用于“一次绑定事件”,还有其他。。

  • 相关阅读:
    [易语言] 六边形扫雷游戏实战开发
    [web开发] 利用微信小程序开发上海大学失物招领平台
    [web开发] Vue + spring boot + echart 微博爬虫展示平台
    [web开发] Vue+Spring Boot 上海大学预约系统开发记录
    [神经网络]一步一步使用Mobile-Net完成视觉识别(一)
    Python中操作ini配置文件
    python操作mySQL数据库
    使用python和selenium写一个百度搜索的case
    功能测试的过程中有关数据安全性的检查点
    python主流测试框架的简介
  • 原文地址:https://www.cnblogs.com/boliang/p/4818262.html
Copyright © 2011-2022 走看看