设计模式

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

2018-11-06  本文已影响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则是一切皆对象,全局对象也可以看做是一种单例,实现单例只是一种模仿。

上一篇下一篇

猜你喜欢

热点阅读