文档章节

javascript的命令模式 和单例模式

chenzhicai
 chenzhicai
发布于 2014/06/17 16:15
字数 487
阅读 252
收藏 7
点赞 1
评论 0

var createCommandMoule =(function (){/*创建单体数据模块的*/

         var _theCommandMoule;

         function init(){

                var  _CommandMoule = {

                         /*valueDatas一般是放的键值对的对象{key:"url",value:value}*/

                         valueDatas:[],

                         getData:function(keyValue){ //取数据

                             var self = this,

                                 theValue = null,

                                 valueDatas = self.valueDatas; 

                            /*网上看别人的测试forEach比 for(var i =0;i<valueDatas .length; i++)性能高很多

                            * 自己也测了一下差不高10倍 */         

                            valueDatas.forEach(function(x){

                                if(x.key == keyValue){

                                    theValue = valueDatas[i].value;

                                }

                             });

                             if(theValue == null){

                                 /*正常情况如果没有存在数据会去服务器请求数据*/

                                 // theValue = self.queryData(keyValue);

                             }

                            

                             return theValue;

                         },

                         queryData:function(keyUrl){  

                             /*一般这是用来请求数据用得*/

                         },

                         saveData:function(keyValue,value){

                             /*存数据前,先看看这个数据是否存在*/

                             var self = this;

                             if(!(self.getData(keyValue))){

                                 var theValueObject = {

                                     key:keyValue,

                                     value:value

                                 };

                                 self.valueDatas.push(theValueObject);

                             }

                         },

                         deleteData:function(keyValue){ //删除数据

                             var self = this;

                             var valueDatas = self.valueDatas;

                             valueDatas.forEach(function(x){

                                if(x.key == keyValue){

                                    valueDatas.splice(i);

                                }

                              });

                         },

                         changeValue:function(keyValue,value){

                             var self = this;

                             var valueDatas = self.valueDatas;

                             var ifChange = false;  //如果返回true表示修改成功了

                             valueDatas.forEach(function(x){

                                if(x.key == keyValue){

                                    valueDatas[i].value = value;

                                     ifChange = true;

                                }

                             });

                             return ifChange;

                         }

                         };

                

                 return _CommandMoule;

                

         }

         return {

             getDataMoule:function(){

                 if(!_theCommandMoule){  //单体模式如果存在了就直接返回

                     _theCommandMoule = init();

                 }

                 return _theCommandMoule;

         }

         };

})();



function letsgo(){

     var aDataMoule = createCommandMoule.getDataMoule();  

    

     aDataMoule.saveData("m1","theValue key is m1");

     var theValue = aDataMoule.getData("m1");

     console.log(theValue);

     var bDataMoule = createCommandMoule.getDataMoule(); 

     /*因为使用单体模式所以aDataMoule 和bDataMoule是一个东西*/

     var bthevalue = bDataMoule.getData("m1");

     /*bDataMoule没有存m1的数据一样也能取得*/

     console.log(bthevalue);

     /*保存数据、删除数据、修改数据只要一个命令就可以了*/

     aDataMoule.saveData("m2","theValue key is m1");  //保存数据

     aDataMoule.deleteData("m2");  //删除数据

     console.log(aDataMoule.getData("m2"));  //取没有的数据,一般去没有的数据会发出服务器请求参数是url

}


/*

输出

theValue key is m1 MyCommandMoul.js:80

theValue key is m1 MyCommandMoul.js:85

null MyCommandMoul.js:89


*/


© 著作权归作者所有

共有 人打赏支持
chenzhicai

chenzhicai

粉丝 3
博文 2
码字总数 719
作品 0
浦东
程序员
JavaScript设计模式系列三之单例模式(附案例源码)

文章初衷 设计模式其实旨在解决语言本身存在的缺陷 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什...

小钱钱阿圣
2017/09/22
0
0
JavaScript设计模式之观察者模式

前言 准备研究一下MVVM的一些东西,由于MVVM运用了观察者模式的思想,因此翻开了《JavaScript设计模式与开发实践》一书,将观察者模式学习了一遍,顺便有对一些常用的设计模式进行一些了解,...

Srtian
05/22
0
0
JavaScript 中常见设计模式-单例模式

     单例模式两个条件   确保只有一个实例   可以全局访问   适用   适用于弹框的实现,全局缓存   实现单例模式      JavaScript 中的单例模式   因为 JavaScript 是无...

webstack前端栈
05/19
0
0
javascript 设计模式之工厂(Factory)模式

工厂模式介绍 工厂模式是一个创建型的模式,主要就是创建对象。其中工厂模式又分为简单工厂模式和抽象工厂模式。简单工厂模式是通过工厂方法确定创建 对应类型的对象。抽象工厂模式是通过子类...

hlxiong
2014/04/14
0
0
你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人
06/02
0
0
JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云
05/18
0
0
使用合适的设计模式一步步优化前端代码

作者:晓飞 本文原创,转载请注明作者及出处 --- 在后端语言中,设计模式应用的较为广泛。如Spring中常见的工厂模式、装饰者模式、单例模式、迭代器模式。但是在日常的前端开发中,设计模式使...

iKcamp
2017/10/27
0
0
JS单例模式《JavaScript设计模式与开发实践》阅读笔记

此文仅记录本人阅读《JavaScript设计模式与开发实践》这个本时的感受,感谢作者曾探写出这么好的一本书。如有冒犯,如有错误,请联系本人:luogao_lg@sina.com处理。 这一章让我知道了单例模...

RoyLuo
05/17
0
0
js策略模式《JavaScript设计模式与开发实践》阅读笔记

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且是它们可以相互替换。 策略模式可以避免代码中的多重判断条件。 策略模式很好的体现了开放-封闭原则,将一个个算法(解决方...

RoyLuo
05/19
0
0
JavaScript设计模式系列二之建造者模式(附案例源码)

文章初衷 设计模式其实旨在解决语言本身存在的缺陷, 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什...

小钱钱阿圣
2017/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Laravel5.5 MySQL配置、读写分离及操作

Laravel 让连接不同数据库以及对数据库进行增删改查操作: 参考:http://laravelacademy.org/post/854.html 配置读写分离 应用的数据库配置位于 config/database.php(但是数据库用户及密码等...

MichaelShu
6分钟前
0
0
Linux 查看用户

存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow 查看当前系统所有用户 grep bash /etc/passwd root修改普通用户的密码 sudo passwd user_name 然后连续两次输入新的用户密码即可...

yeahlife
13分钟前
0
0
Webpack使用nodemon实时打包编译

业务场景: 1.编写一个npm组件包并且link到了项目文件中 2.需要不断的修改并run build编译npm包并且在项目run dev 查看效果 3.问题: 每次改完npm包都要手动run build编译十分的麻烦且低效,可不...

JamesView
24分钟前
0
0
电脑炸了,浪费我好几天时间,还是简要记下来吧

我的小本本一直在兢兢业业的干活,然而前几天说炸就炸了...... 爆炸现场: 软件: windows10 pro + EIS11+ 360卫士 BIOS:N1DET98W 2.24 硬件: Xeon E3 1505-V5 nv-M3000M thinkpadP70:20E...

Oh_really
28分钟前
0
0
Git之branch和checkout

1.branch是查看、创建、删除分支 #>git branch --helpNAME git-branch - List, create, or delete branchesSYNOPSIS git branch [--color[=<when>] | --no-color] [......

汉斯-冯-拉特
30分钟前
0
0
Mybatis拦截器之数据权限过滤与分页集成

需求场景 最近项目有个数据权限的业务需求,要求大致为每个单位只能查看本级单位及下属单位的数据,例如:一个集团军下属十二个旅,那么军级用户可以看到所有数据,而每个旅则只能看到本旅部...

佛系程序猿灬
39分钟前
9
0
SpringCloud 微服务 (十六) 服务追踪 Zipkin

问题 在服务中,有一个接口,该A接口中又调用了其他服务的B、C、D接口,出现一个请求耗时大的问题,这时候并不知道该B、C、D接口中哪个接口造成的耗时量,然后比如确定C服务接口出现的耗时量大,但...

___大侠
今天
0
0
Java面试基础篇——第八篇:抽象类与接口的区别

1.抽象类 抽象类:如果一个类中包含有抽象方法,或这个类使用abstract关键字修饰,则称这个类是抽象类。 抽象方法是什么呢?抽象方法就是指用abstract关键字修饰的方法。 需要注意的是:抽象...

developlee的潇洒人生
今天
2
0
jsoup 相关资料

1.jsoup 2.Jsoup概述 3.jsoup入门 4.jsoup Java HTML Parser 1.11.3 API

IT追寻者
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部