资讯专栏INFORMATION COLUMN

JavaScript设计模式-第一部分:单例模式、组合模式和外观模式

betacat / 348人阅读

摘要:但是,这并不是采用单例的唯一原因。使用命名空间单例模式也被称为模块设计模式。函数内部声明了一些局部函数和或变量。紧随函数声明放置即可立即执行外部函数,并将所得的对象文字费赔给变量。

JavaScript设计模式-第一部分:单例模式、组合模式和外观模式

设计模式是一些可靠的编程方式,有助于保证代码更加易于维护、扩展及分离,所有设计模式在创建大型JavaScript应用程序时均不可或缺

单例模式

单例模式是指在您要确保始终只创建一个对象实例时使用的设计模式。在面向对象的经典编程语言中,创建单例模式背后的概念多少有点让人难以理解,因为其中包含一个同时具有静态及非静态属性和方法的类。但本文主要讨论JavaScript,因此,由于JavaScript是一种不包含真正类的动态语言,因此JavaScript版本的单例模式极其简单。

为什么需要采用单例模式?
在我开始介绍实施细节之前,我需要探讨一下为什么单例模式对于应用程序非常有用。它能够确保您只有一个对象实例能够实际派上用场。在服务器端语言中,您可能会使用单例处理数据库连接,这是由于为一个请求创建多个数据库连接纯粹是一种资源浪费。同样,在前端JavaScript中,您可能会希望将负责处理所有AJAX请求的某个对象设置为单例。规则非常简单:如果每m次创建新实例时,实例的功能均完全相同,那么将其设置为单例。

但是,这并不是采用单例的唯一原因。至少在JavaScript中,单例可让您保证命名空间对象和函数井然有序,防止它们与全局命名空间混淆,您可能明白,这是一种可怕的想法,特别是在使用第三方代码的情况下。使用命名空间单例模式也被称为模块设计模式。

展示单例模式
要创建单例,您只需创建一个对象文字。

var Singleton = {
    prop: 1,
    another_prop: "value",
    method: function() {...},
    another_method: function() {...}
};

您还可以创建具有私有属性和方法的单例,但由于设计使用封闭函数和自调用匿名函数,因而稍微有些难以理解。函数内部声明了一些局部函数和/或变量。然后,创建并返回一个对象文字,其中包含一些引用您在更大的函数范围内声明的变量和函数方法。紧随函数声明放置()即可立即执行外部函数,并将所得的对象文字费赔给变量。如果这些介绍让你感到困惑,那么请看下面的代码,随后我将会作出进一步的说明。

var Singleton = (function() {
    var private_property = 0,
        private_method = function () {
            console.log("This is private");
        }
        
    return {
        prop: 1,
        another_prop: "value",
        method: function() {...},
        another_method: function() {...}
    }
}());

关键在于,当通过某个变量所在函数前方的var声明该变量时,该变量只能在函数内部通过该函数内声明的各函数(例如对象文字内函数)进行访问。return语句可帮助我们回到在外部函数自行执行后分配给单例的对象文字。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81160.html

相关文章

  • JavaScript设计模式》读后感 觉很复杂

    摘要:想继续了解设计模式必须要先搞懂面向对象编程,否则只会让你自己更痛苦。创建型设计模式主要有简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式和单例模式,下面一一道来。而工厂方法模式本意是将实际创建对象的工作推迟到子类中。 接触前端两三个月的时候,那时候只是听说设计模式很重要,然后我就去读了一本设计模式的书,读了一部分,也不知道这些设计模式到底设计出来干嘛的,然后就没再看了。后...

    e10101 评论0 收藏0
  • 【JS】常用设计模式

    摘要:常用设计模式大型单页应用里,复杂度上升到一定程度时,没有适当的设计模式进行降耦,后续的开发也难以下手。而设计模式正是为了降耦而存在。特点满足单一职责原则使用代理模式,不在构造函数中判断是否已经创建过该单例满足惰性原则应用弹出登陆窗口。 JS常用设计模式 大型单页应用里,复杂度上升到一定程度时,没有适当的设计模式进行降耦,后续的开发也难以下手。而设计模式正是为了降耦而存在。 单例模式 单...

    VishKozus 评论0 收藏0
  • 前端设计模式

    摘要:作为一个前端新人,学习了设计模式以后,希望能从源头上,用浅显易懂的语言来解释它。创建型设计模式创建型设计模式故名思意,这些模式都是用来创建实例对象的。这就是简单工厂模式。这就是工厂方法模式。 作为一个前端新人,学习了设计模式以后,希望能从源头上,用浅显易懂的语言来解释它。当然不一定是正确的,只是我个人对设计模式的一点浅显理解。 创建型设计模式 创建型设计模式:故名思意,这些模式都是用来...

    newsning 评论0 收藏0
  • “大话”设计模式

    摘要:抽象工厂模式是为了处理对象具有等级结构以及对象族的问题。单例设计模式单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类成为单例类。 导语:设计模式是无数码农前人在实际的生产项目中经过不断的踩坑、爬坑、修坑的经历总结出来的经验教训,经过抽象之后表达成的概念。能够帮助后来的设计者避免重复同样的错误或者弯路。我也抽空整理了一下设计模式,用自己的话总结了一下,自认...

    coordinate35 评论0 收藏0
  • JavaScript设计模式整理

    摘要:写在前面设计模式是程序员通识知识,熟练掌握并使用各种设计模式,可以体现一个程序员的工程开发水平。我花了几天时间,重温并整理了多种设计模式,以为示例语言。节流模式对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能。 写在前面 设计模式是程序员通识知识,熟练掌握并使用各种设计模式,可以体现一个程序员的工程开发水平。我花了几天时间,重温并整理了30多种设计模式,以Jav...

    zhangke3016 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<