zoukankan      html  css  js  c++  java
  • javascript设计模式简单介绍之【单例模式的实现与优化】

    单例模式。这种模式提供了一种将所有代码都组织到一个对象中的手段。它只能被实例化一次。

    由于它只能被实例化一次,我们就可以确定所编写的所有代码用的都是相同的全局资源。

    简单的来说,这种模式就是将很多很多代码封装在一个对象中,并规定对象只能被实例化一次。此对象的唯一实例应在任何地方都可以被访问。

    用途,减少占用全局变量既的数目。组织自己的日常代码,方便以后维护。创建命名空间等等。

    function myMode(){
      //定义一个单例模式对象
    }
    myMode.prototype = {//为其添加方法和属性
      'arg1':'argument1...',
      'init':function(){
        //code...
      }
    }
    var mode = new myMode();//创建一个单例模式实例

    以上便是一个简单的单例模式,它与我们平常看到的定义一个对象并生成它的实例似乎没什么区别。

    当然,它还不是一个完全的单例模式。

    因为由于javascript的特性使然,它的属性以及方法是可以被删除和修改的。

    但是这违背了面向对象设计的原则,类可以被扩展,但是不能被修改。对于这一点,目前还没有比较好的解决办法。(如果有希望各位不吝赐教~拜谢。)

    还有就是,我们无法保证它只被实现了一次。但是我们可以通过一点小手段来保证它只被实现一次。 

    到此,整个单例模式也就基本要结束了。当然,上面那段代码,并不是严格意义上的单例模式、

    下次将会为继续优化它,使它看起来比较像一个真正的单例模式。

    昨天简单的介绍了单例模式的基本实现方式,下面将继续学习如何优化它。

    首先,为了保证单例模式只能被实例化一次,我们可以将它放在一个自执行的匿名函数中。

    var mode = (function(){
      function myMode(){
        
      }
      myMode.prototype
    = {     'arg1':'argument1....',     'init':function(){         //code     }   }      return new myMode() })();

    这段代码与上面的代码得到的结果,是一模一样的。

    不过将myMode放在了一个自执行的匿名函数中,使得在window中无法访问它。

    在匿名函数中,我们返回了它生成的一个实例。当匿名函数结束时,mode得到它的实例的引用。

    而在window下将无法在访问myMode。使得它只能被实例一次。这时它离我们期望达到的目的又进了一步。

    大家都知道javascript中对象的声明有多种形式,在这个单例的内部我们采用的是最常规的一种,通过new关键字创建的。

    然而这种方式并不适合单例模式,因为我们并不需要创建多个实例。为此而定义一个class显然是不值得的。

    下面我们将采用{}的方式来创建一个对象,这种方式将更加适用于单例模式,也使得代码更容易被阅读。

    var mode = (function(){
      return {
        'arg1':'argument1...',
        'init':function(){
          //code
        }
      }
    })();

    通过这种方式创建,不但使得代码更精简,也使得更容易阅读。

    好了,到此为止。整个单例模式的学习到此就结束了。

  • 相关阅读:
    ios开发-2015-08-07
    ios开发-2015-08-06
    ios开发-2015-08-04
    ios开发-2015-08-03
    ios开发-2015-08-02
    Selenium学习笔记之013:控制滚动条到底部 分类: Selenium 2015-07-23 00:26 19人阅读 评论(0) 收藏
    Selenium学习笔记之012:处理下拉框 分类: Selenium 2015-07-23 00:15 19人阅读 评论(0) 收藏
    Selenium学习笔记之012:处理下拉框
    Selenium学习笔记之011:操作对象 分类: Selenium 2015-07-22 23:33 15人阅读 评论(0) 收藏
    Selenium学习笔记之011:操作对象
  • 原文地址:https://www.cnblogs.com/lynxcat/p/2439838.html
Copyright © 2011-2022 走看看