博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript设计模式-单体singleton模式(2)
阅读量:4290 次
发布时间:2019-05-27

本文共 2795 字,大约阅读时间需要 9 分钟。

单体(singleton)模式是javascript中最基本但又是最有用的模式之一,它可能比其他任何模式都常用。这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源

简单单体模式

var Singleton = {    attr1: true ,     attr2: 10 ,    method1 : function(){
alert('我是方法1'); }, method2 : function(){
alert('我是方法2'); }};alert(Singleton.attr1);// 补充 :划分命名空间 (区分代码) Ext.Manager.attr1 / method1var BHX = {};BHX.Singleton = { attr1: true , attr2: 10 , method1 : function(){
alert('我是方法1'); }, method2 : function(){
alert('我是方法2'); } };BHX.Singleton.method1();

闭包单体

闭包主要的目地是保护数据,可以添加自己的私有成员,外界无法直接访问,只能通过暴露出去的方法或属性来访问

var BHX = {} ;BHX.Singleton = (function(){
// 添加自己的私有成员 var a1 = true ; var a2 = 10 ; var f1 = function(){
alert('f1'); }; var f2 = function(){
alert('f2'); }; // 把块级作用域里的执行结果赋值给单体对象 return { attr1: a1 , attr2: a2 , method1 : function(){
return f1(); }, method2 : function(){
return f2(); } } ;})();alert(BHX.Singleton.attr1);BHX.Singleton.method1();

惰性单体

对于上述闭包这种模式,如果私有的成员变量很多的话,只能被一次性加载,无法做到对其中某些变量只有用到的时候才会去加载。因此惰性单体模式可以有效解决这种问题

var Ext = {};    Ext.Base = (function() {
// 私用变量 控制返回的单体对象 var uniqInstance; // undefined // 需要一个构造器 init 初始化单体对象的方法 function init() {
// 私用成员变量 var a1 = 10; var a2 = true; var fn1 = function() {
alert('fn1') }; var fn2 = function() {
alert('fn2') }; return { attr1: a1, arrt2: a2, method1: function() {
return fn1(); }, method2: function() {
return fn2(); } }; } return { getInstance: function() {
if (!uniqInstance) { //如果不存在 创建单体实例 uniqInstance = init(); } return uniqInstance; } }; })(); alert(Ext.Base.getInstance().attr1); Ext.Base.getInstance().method1();

对于这种模式,我们可以有很多个类似uniqInstance的变量来控制之后执行的init方法中需要被加载的变量及方法,只需要分别调用不同的getInstance来做多资源需要被调用的时候才会去加载

分支单体

判断程序的分支 <浏览器差异的检测>

var Ext = {} ;var def =  false ;Ext.More = (function(){
var objA = { // 火狐浏览器 内部的一些配置 attr1:'FF属性1' // 属性1 // 属性2 // 方法1 // 方法2 } ; var objB = { // IE浏览器 内部的一些配置 attr1:'IE属性1' // 属性1 // 属性2 // 方法1 // 方法2 } ; return (def) ?objA:objB;})();alert(Ext.More.attr1);

转载地址:http://kergi.baihongyu.com/

你可能感兴趣的文章
netty源码分析之-开发过程中重要事项分析(7)
查看>>
Sublime Text3插件详解
查看>>
netty源码分析之-ByteBuf详解(8)
查看>>
javascript函数定义三种方式详解
查看>>
javascript中this关键字详解
查看>>
javascript关于call与apply方法详解
查看>>
netty源码分析之-ReferenceCounted详解(9)
查看>>
javascript闭包详解
查看>>
javascript类的创建与实例对象
查看>>
javascript原型详解(1)
查看>>
netty源码分析之-处理器详解(9)
查看>>
javascript原型对象存在的问题(3)
查看>>
javascript原型继承(1)
查看>>
javascript原型继承-实现extjs底层继承(2)
查看>>
javascript设计模式-建立接口的方式(1)
查看>>
javascript设计模式-单体singleton模式(2)
查看>>
javascript设计模式-链式编程(3)
查看>>
大型高并发与高可用缓存架构总结
查看>>
javascript设计模式-工厂模式(4)
查看>>
javascript设计模式-组合模式(6)
查看>>