首页 > 代码库 > javascript设计模式-单例模式

javascript设计模式-单例模式

  在C#中,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,会提供一个静态方法,通过该静态方法可以取得唯一实例。这就确保了一个类只有一个实例对象:

public class Singleton{    private static Singleton _instance = null;    private Singleton(){}    public static Singleton CreateInstance()    {        if(_instance == null)        {            _instance = new Singleton();        }        return _instance;    }}

 

  在js中,单例模式的定义是产生一个类的唯一实例,但js本身是一种“无类”语言。很多讲js设计模式的文章把{}当成一个单例来使用也说得通。因为js生成对象的方式有很多。

  单例模式是Javascript最基本,最有用的模式之一。它提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码通过单一的变量进行访问。单例在Javascipt中有许多用处,可以用来划分命名空间,以减少全局变量的泛滥。

  Javascript中单例模式的实现方式有多种,每一种都有自身的优点或缺点。

1.对象字面量创建单例

这个也可以归为创建单例的一种方式,在对象字面量中可以添加一些属性和方法:

var mySingleton = {         name: "Rose",         age: 20,         method1: function () {       
//your method
}};

如果要扩展,可以添加属性和方法。利用对象字面量,可以进行命名空间的划分。

2.在函数内部声明私有成员和方法,通过闭包在其内部封装这些变量和函数。只暴露需要暴露的公有成员和方法:

var mySingleton = function () {           var privateVariable = ‘private var‘;        function showPrivate() {                console.log(privateVariable);        }        return {              publicMethod: function () {                            showPrivate();                },               publicVar: ‘public var‘        };};var single = mySingleton();single.publicMethod();  // output‘private var‘console.log(single.publicVar); // output ‘public var‘

3.使用立即执行函数进行构造

使用立即执行函数进行构造的一个好处就是节约资源:

var Singleton = (function () {        var instantiated;        function init() {                return {                     publicMethod: function () {                             console.log(‘hello world‘);                     },                     publicProperty: ‘test‘               };        }        return {                getInstance: function () {                        if (!instantiated) {                                instantiated = init();                        }                        return instantiated;                }        };})();Singleton.getInstance().publicMethod();

这样就做到了只有在使用时才初始化。

 单例模式要点:某个“类”只有一个模式,必须自己创建这个实例,且向系统提供这个实例。

javascript设计模式-单例模式