【javascript设计模式】4.单例模式

简介: 【javascript设计模式】4.单例模式

Singleton单例模式

单例模式,能够限制类的实例化次数只能为一次。单例模式,在该实例不存在的情况下,

可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用;

示例:

<script type="text/javascript">
  var mySingleton = (function () {
    //实例保持了singleton 的一个引用
    var instance;
    function init() {
      //singleton
      //私有方法和变量
      function privateMethod() {
        console.log("I am private");
      }
      var privateVariable = "I am also private";
      var privateRandomNumber = Math.random();
      return {
        //公有方法和变量
        publicMethod: function () {
          console.log("The public can see me!");
        },
        publicProperty: "I am also public",
        getRandomNumber: function() {
          return privateRandomNumber;
        }
      };
    };
    return {
      //获取singleton 的实例,如果存在就返回,不存在就创建新实例
      getInstance: function() {
        if(!instance) {
          instance = init();
        }
        return instance;
      }
    };
  })();
  var singleA = mySingleton.getInstance();
  var singleB = mySingleton.getInstance();
  console.log(singleA.getRandomNumber()===singleB.getRandomNumber());//true
</script>

在实践中,当在系统中确实需要一个对象来协调其他对象时,>Singleton模式很有用。

示例:

<script type="text/javascript">
  var SingletonTester = (function() {
    //options: 包含singleton所需配置信息的对象
    //var options = {name:"test",pointX:5};
    function Singleton(options) {
      //如果未提供options,则设置为空对象
      options = options || {};
      //为singleton设置一些属性
      this.name = "SingletonTester";
      this.pointX = options.pointX || 6;
      this.pointY = options.pointY || 10;
    }
    //实例持有者
    var instance;
    //静态变量和方法的模拟
    var _static = {
      name: "SingletonTester",
      //获取实例的方法,返回singleton对象的singleton实例
      getInstance: function(options) {
        if(instance === undefined) {
          instance = new Singleton(options);
        }
        return instance;
      };
      return _static;
    }
  })();
  var singletonTest = SingletonTester.getInstance({
    pointX: 5
  });
  console.log(singletonTest.pointX);//5
</script>


相关文章
|
25天前
|
设计模式 安全 测试技术
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
【C/C++ 设计模式 单例】单例模式的选择策略:何时使用,何时避免
59 0
|
1月前
|
设计模式 缓存 安全
【设计模式】单例模式:确保类只有一个实例
【设计模式】单例模式:确保类只有一个实例
20 0
|
3月前
|
设计模式 数据库连接 数据库
发挥设计模式单例模式的力量:从技术到社会的转变
发挥设计模式单例模式的力量:从技术到社会的转变
|
3月前
|
设计模式 前端开发 算法
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
|
3月前
|
设计模式 安全 Java
设计模式-单例模式
设计模式-单例模式
36 0
|
1月前
|
设计模式 安全 Java
设计模式之单例模式
设计模式之单例模式
|
3月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
39 0
|
5天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
12 1
|
1月前
|
设计模式 存储 缓存
设计模式之单例模式(C++)
设计模式之单例模式(C++)
21 2
|
1月前
|
设计模式 缓存 JavaScript
js常用设计模式
js常用设计模式
20 1