JavaScript设计模式-第一部分:单例模式、组合模式和外观模式

JavaScript设计模式-第一部分:单例模式、组合模式和外观模式javascript

设计模式是一些可靠的编程方式,有助于保证代码更加易于维护、扩展及分离,全部设计模式在建立大型JavaScript应用程序时均不可或缺html

单例模式

单例模式是指在您要确保始终只建立一个对象实例时使用的设计模式。在面向对象的经典编程语言中,建立单例模式背后的概念多少有点让人难以理解,由于其中包含一个同时具备静态及非静态属性和方法的类。但本文主要讨论JavaScript,所以,因为JavaScript是一种不包含真正类的动态语言,所以JavaScript版本的单例模式极其简单。前端

为何须要采用单例模式?
在我开始介绍实施细节以前,我须要探讨一下为何单例模式对于应用程序很是有用。它可以确保您只有一个对象实例可以实际派上用场。在服务器端语言中,您可能会使用单例处理数据库链接,这是因为为一个请求建立多个数据库链接纯粹是一种资源浪费。一样,在前端JavaScript中,您可能会但愿将负责处理全部AJAX请求的某个对象设置为单例。规则很是简单:若是每m次建立新实例时,实例的功能均彻底相同,那么将其设置为单例。html5

可是,这并非采用单例的惟一缘由。至少在JavaScript中,单例可以让您保证命名空间对象和函数井井有理,防止它们与全局命名空间混淆,您可能明白,这是一种可怕的想法,特别是在使用第三方代码的状况下。使用命名空间单例模式也被称为模块设计模式。java

展现单例模式
要建立单例,您只需建立一个对象文字。数据库

var Singleton = {
    prop: 1,
    another_prop: 'value',
    method: function() {...},
    another_method: function() {...}
};

您还能够建立具备私有属性和方法的单例,但因为设计使用封闭函数和自调用匿名函数,于是稍微有些难以理解。函数内部声明了一些局部函数和/或变量。而后,建立并返回一个对象文字,其中包含一些引用您在更大的函数范围内声明的变量和函数方法。紧随函数声明放置()便可当即执行外部函数,并将所得的对象文字费赔给变量。若是这些介绍让你感到困惑,那么请看下面的代码,随后我将会做出进一步的说明。编程

var Singleton = (function() {
    var private_property = 0,
        private_method = function () {
            console.log('This is private');
        }
        
    return {
        prop: 1,
        another_prop: 'value',
        method: function() {...},
        another_method: function() {...}
    }
}());

关键在于,当经过某个变量所在函数前方的var声明该变量时,该变量只能在函数内部经过该函数内声明的各函数(例如对象文字内函数)进行访问。return语句可帮助咱们回到在外部函数自行执行后分配给单例的对象文字。设计模式

相关文章
相关标签/搜索