javascript设计模式学习——单例模式

单例模式:又被称为单体模式,是只允许实例化一次的对象类。

运用:

1.用一个对象来规划一个命名空间(如:JQuery库,单例模式就为它提供了一个命名空间),井井有条地管理对象上的属性与方法。

2.通过单例模式来管理代码库的各个模块

  模块化的概念由来已久,并且在JS中也有很长久的使用历史。通常我们在编写代码时,会将复杂的问题根据实际情况进行合理的拆分,让代码更具备可读性与可维护性。因此一个模块可以理解为整体的一部分。而且随着JS应用复杂度的提高,模块化的应用也变成了必须。

  在之前的JS中,没有专门为模块化提供相应的语法支持,但好在我们还有闭包。因此以前我们借助自执行函数来模拟一个模块。

  

var moduleDemo = (function name(params) {
    function bar() {};
    function foo() {};
    function map() {};

    return {
        bar: bar,
        foo: foo,
        map: map,
    }
})();
//访问模块内部的方法
moduleDemo.bar();

bar,foo,map三个方法在函数内部被定义,但是却可以在外部使用。所以很简单就能看出,我们借助闭包实现了模块。借助这样的思路,我们可以封装一些工具方法组成一个单独的工具模块,以避免代码的重复编写。这样的比较出名的实践有 lodashaxios等。他们都是在实践中用得比较多的工具模块。

模块化是单例模式的一种实践应用。

3.管理静态变量

  静态变量特点: 只能访问不能修改,创建后就能使用

  ---js实现方法,定义在函数内部,只能通过特权方法访问,不提供赋值变量的方法,只提供获取变量的方法

    而为了实现创建后就能访问,就让创建的函数执行一次,此时,我们创建的对象内保存静态变量通过取值器访问,最后将这个对象作为一个单例放在全局空间里作为静态变量单例对象供他人使用

    (先创建好,不管需不需在内存中都会存在这个单例对象------俗称“恶汉模式”)

  代码demo: 主要使用了一个自执行的一个闭包,自执行保证创建之后就能使用,而闭包能保护数据,数据的访问,通过闭包返回一个取值器的方法(借助闭包实现单例模式)

var config = (function(){
            var conf = {
                MAX_NUM : 100,
                MIN_NUM : 0,
                COUNT: 100,
            }
            return {
                //取值器方法
                get: function (name) {
                    return conf[name] ? conf[name] : null;
                }
            }
        })()

4. 惰性单例

  而有些单例对象需要延迟创建,有人也称之为“惰性创建”(如果已经创建了就直接返回,如果没有被创建,就创建一个出来,即需要的时候进行创建---------俗称“懒汉模式”)

        //惰性载入单例
        var LazySingle = (function (){
            //单例实例引用
            var _instance = null;
            //单例
            function Single(){
                /*这里定义私有属性和方法*/
                return {
                    publicMethod: function (){},
                    publicProperty: ‘1.0‘,
                }
            }
            //获取单例对象接口
            return function() {
                //如果不是这个单例九江创建单例模式
                if (!_instance) {
                    _instance = Single();
                }
                return _instance;
            }
        })()

        console.log(LazySingle().publicProperty)

  以上,可以总结出单例模式的好处:

1.定义命名空间,便于管理与维护

2.比起每次new一个对象出来,可以大大减少内存,减少对资源的占用

原文地址:https://www.cnblogs.com/liurui0923/p/9351125.html

时间: 2024-10-14 21:48:56

javascript设计模式学习——单例模式的相关文章

javascript设计模式学习之四——单例模式

单例模式的定义:确保一个实例,并提供全局访问. 惰性单例的定义:只在需要的时候才创建对象. 在开发中,有些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等. java中的单例 关键在于使用一个变量来标志当前是否为某个类创建过对象. public class Singleton { private Singleton() {} private static Singleton single=null; //静态工厂方法 public static Singleton getI

[JavaScript设计模式]惰性单例模式

惰性单例模式 之前介绍了JS中类的单例模式,这次我们讨论下单例模式的应用.在众多网站中,登录框的实现方式就是一个单例,点击一次就展示一次,所以我们可以在页面加载好的时候就创建一个登录框,点击页面上的登录按钮时,用于控制它的显示和隐藏. 代码实现: 登录 ``` --> 这样的问题就是,如果用户进来后所有的操作根本没有用到登录,那创建登录框这个操作就是无用的,所以改进为当用户点击登录按钮时才开始创建登录框,如下: 登录 ``` --> 现在达到了惰性的目的,但失去了单例的效果.每次点击登录都会创

Javascript设计模式学习一

学习Javascript设计模式之前,需要先了解一些相关知识,面向对象的基础知识.this等重要概念,以及掌握一些函数式编程的技巧. Js多态 多态的思想:实际上是把“做什么”和“谁去做”分离开来.例: var makeSound = function(animal){ if(animal.show instanceof Function){ animal.show(); } } var dog = { show: function(){ console.log('汪汪'); } } var c

JavaScript设计模式学习之路——面向对象的思想

今天,我拿到了张容铭写的这本<JavaScript设计模式>这本书,开始了关于JavaScript更深一点的学习. 看到这本书开始的时候,虽然之前通过看书.一些比较好的视频的讲解,对JavaScript有了基础的认识,但是,在看到书的内容的时候,我内心还是有一种自己差的十万八千里的感觉,之前的代码写法不行,使用全局变量.全局函数,只是面向过程的编程的方法,扩展性.可重用性太低.以后我将每天更新博客,将自己所学每一种设计模式都po出来,我要自己看到自己的进步!!加油! 今天的内容是————面向对

JavaScript设计模式学习笔记

1 JavaScript设计模式深入分析 私有属性和方法:函数有作用域,在函数内用var 关键字声明的变量在外部无法访问,私有属性和方法本质就是你希望在对象外部无法访问的变量. 特权属性和方法:创建属性和方法时使用的this关键字,因为这些方法定义在构造器的作用域中,所以它们可以访问到私有属性和方法;只有那些需要直接访问私有成员的方法才应该被设计为特权方法. 共有属性和方法:直接链在prototype上的属性和方法,不可以访问构造器内的私有成员,可以访问特权成员,子类会继承所有的共有方法. 共有

js设计模式学习 --- 单例模式1

什么单例模式 定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器中的window 对象等.在JavaScript 开发中,单例模式的用途同样非常广泛.试想一下,当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个浮窗都只会被创建一次,那么这个登录浮窗就适合用单例模式来创建. 实现单例模式 <script type="text/javascrip

javaScript设计模式---(单例模式学习)

单例模式 一个类只能有一个实例化对象.如页面中的弹出框蒙层,一个页面只需要一个. 实现方式:创建一个类,这个类包含一个方法,这个方法在没有对象存在的情况下,将会创建一个新的实例对象.如果对象存在,这个对象只是返回这个对象的引用. var singleton = (function singleton () { var instance = null; // 存储单例实例的引用 // 创建单例 function init () { // 私有方法和属性 function privateMethod

学习javascript设计模式之单例模式

1.单例模式的核心是确保只有一个实例,并提供全局访问. 2.惰性单例 指的是在需要的时候才创建对象实例. 如在页面中创建唯一div 普通做法 var createDiv = (function(){    var div;    return function(){        if(!div){            div = document.createElement("div");            div.style.width="100px"; 

java设计模式学习 ----- 单例模式(Singleton)

单例模式(Singleton) 单例对象(Singleton)是一种经常使用的设计模式. 在Java应用中,单例对象能保证在一个JVM中,该对象仅仅有一个实例存在.单例模式也分三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有几个长处: 1.某些类创建比較频繁,对于一些大型的对象,这是一笔非常大的系统开销. 2.省去了new操作符,减少了系统内存的使用频率,减轻GC压力. 3.有些类如交易所的核心交易引擎.控制着交易流程,假设该类能够创建多个的话,系统全然乱了.(比方一个军队出现了多个司令员