JS设计模式-单例模式

初入js坑时,满脸懵逼的我认为设计模式就该是后端头疼的,对,头疼,盖因粗略扫描下来也就十几二十种吧,彼时很有种隔岸观火看到你过得很差我也就安心的自得。染鹅,打脸啪啪的,实不该忘记javascript前可不是白缀个java的,怎么能不趟一下设计模式这“浑水”。
--以上,吐槽完毕javascript

设计模式主要分为三大类:建立型模式、结构型模式、行为模式。本篇只涉及建立型模式,表问我为何,由于其余两种我也不了解,泪目。java

所谓建立型模式,是指基于建立对象的概念。单例模式、工厂模式、抽象工厂模式就属于典型的建立型模式。后端

单例模式

所谓单例模式,是指仅实例化该类一次,该实例提供一个众所周知的全局访问点。为何要限制仅实例化一次呢?由于全局只须要一个poly啊。例如在封装组件Alert的时候,只须要实例化一次,将该实例挂在全局对象下,这样除了第一次调用的时候须要实例化,后续都是在确认已有Poly实例后,直接调用已有的惟一实例,只是须要传入不一样的提示语句做为参数。设计模式

- 懒汉式this

// code 1
var poly = (function(){
   var instance;
   var Poly = function(){
      this.name = "Poly";
   };
   return {
      getInstance: function(){
         if (!instance) {
            instance = new Poly();
            console.log("init onece");
         }
         return instance;
      }
   }
})();

运行结果以下:
图片描述spa

以上代码,只打印了一次init onece,除了第一次走进if (!instance)条件语句中进行实例化,后续两次并无实例化,而是直接返回Poly的实例。设计

- 饿汉式code

你应该看出来了,以上代码是在调用poly对象的getInstance方法时才进行实例化,还有一种情形是poly对象得到的直接是Poly类的一个实例,以下:对象

// code 2
var poly = (function(){
   var instance;
   var Poly = function(){
      this.name = "Poly";
   };
   if (!instance) {
      instance = new Poly();
      console.log("init onece");
   }
   return instance;
})();

运行结果以下:
图片描述blog

code 1 和 code 2所展现的是单例模式的两种使用方式:懒汉式和饿汉式(这名字略粗犷的赶脚?蜜汁微笑?)。懒汉式即延迟到使用时才实例化,饿汉式即一开始加载类时就实例化。前者省空间,后者省时间,按需食用,oh不,按需使用。

单例模式暂时这么些,若是后续了解更多会默默补充上来,下一次会分享工厂模式。话说,貌似说了不少“下一次”这类话?难怪懂得这么多道理还减很差这场肥。

相关文章
相关标签/搜索