美文网首页设计模式
设计模式(一):单例模式

设计模式(一):单例模式

作者: 月肃生 | 来源:发表于2018-11-06 10:48 被阅读0次

    单例模式

        保证一个类仅有一个实例,提供访问入口。

    实现单例模式

    创建一个类,通过getInstance来获取对象

    var Singleton = function (name) {
      this.name = name
    }
    Singleton.prototype.getName = function() {
      alert(this.name)
    }
    // 将单例对象绑定在类上面
    Singleton.getInstance = function(name) {
      if(!this.instance){
        this.instance = new Singleton(name)
      }
      return this.instance
    }
    // 或者通过匿名函数创建
    Singleton.getInstance = (function(){
      var instance = null
      return function(name) {
        if(!this.instance){
          this.instance = new Singleton(name)
        }
        return this.instance
      }
    })()
    ```var Singleton= (function() {
      var instance
      return function(name){
        if(instance) {
          return instance
        }
        this.name = name
        return instance=this
       }
     })()
    

    但是有个缺点,Java通过将构造函数私有化实现单例,而上面的例子中仍可通过new Singleton()获得实例。

    改进

    var Singleton= (function() {
      var instance
      return function Single(name){
        if(instance) {
          return instance
        }
        this.name = name
        return instance=this
       }
     })()
    

    通过匿名函数创建对象,但是这个Single有点奇怪,准确来说并不是一个类(有返回值),只是一个函数。

    代理实现单例

    function Singleton(name){
        if(instance) {
          return instance
        }
        this.name = name
        return instance=this
     }
    
    var ProxySingleton = (function() {
      var instance
      return function (name){
        if(!instance) {
          instance = new Singleton(name)
        }
        return instance
       }
     })()
    

    通过代理实现单例,Singleton本身没有变化,只是通过代理获取对象。

    总结

    准确来说,单例模式只是Java中存在的,因为Java是类为基础的,所有对象都是类的实例,而在JavaScript则是一切皆对象,全局对象也可以看做是一种单例,实现单例只是一种模仿。

    相关文章

      网友评论

        本文标题:设计模式(一):单例模式

        本文链接:https://www.haomeiwen.com/subject/bqpyxqtx.html