javascript单例模式(1)

单例(singleton).这种模式提供了一种将代码组织为一个逻辑单元的手段,可以通过单一变量来访问。通过确保单例对象只有一个拷贝,可以确保代买使用童颜的全局资源。单例可以用来划分命名空间,可以借助单例把代码组织的更为一致,从而更容易阅读和维护。

本文参照这本书第五章,介绍的重点和另一本书好像是不同的。结合着看看    
s3398900.jpg

单例的基本结构

最基本的就是一个对象字面量

//对象字面量作为单体
var Singleton = {
  attribute1: true,
  attribute2: 10,

  method1: function() {

  },
  method2: function(arg) {

  }
};

Singleton.attribute1 = false; //修改
var total = Singleton.attribute2 + 5; //使用单例
var result = Singleton.method1();```

`方法位于对象字面量中就有了命名空间,和其他同名的函数就不会冲突了。对象字面量里的方法统一用  nameSpace.method的格式调用`
对象字面量的命名空间还可以继续划分例如parent.children.method。
这样不仅变量发生冲突的机会大大减少,而且归属更明确了。

上面的对象字面量的单例是不是很眼熟? 在node程序中的配置文件config.js里面是不是都是这种代码? 配置项都是全局唯一的。

#####惰性实例化
本来单例是想写这个内容的,但是今天一看,还是没看全。曾探的js模式书里的单例其实都是这个部分。`实际的单例代码放在一个函数中,然后使用一个变量来缓存实例化的代码,如果已经实例化就直接返回缓存的代码。`

MyNamespace.Singleton = (function() {

var uniqueInstance; // 私有变量缓存实例化单例

function constructor() { // 具体需要按需加载的代码.
var privateAttribute1 = false;
var privateAttribute2 = [1, 2, 3];

function privateMethod1() {
  ...
}
function privateMethod2(args) {
  ...
}

return { // Public members.
  publicAttribute1: true,
  publicAttribute2: 10,

  publicMethod1: function() {
    ...
  },
  publicMethod2: function(args) {
    ...
  }
}  }

return {
getInstance: function() {
if(!uniqueInstance) { // 单例若不存在,调用constructor函数
uniqueInstance = constructor(); //调用constructor函数后,缓存返回值
}
return uniqueInstance;
}
}
})();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,556评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,872评论 19 139
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 9,860评论 4 34
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,167评论 0 4
  • 人生的旅程,就像季节的更迭,潇风柔雨,花开花谢,不停地面对着,缘深缘浅,缘聚缘散,不断地经历着。也许生命本身就是在...
    D038_礼恩_佛山阅读 1,553评论 0 2

友情链接更多精彩内容