文档章节

javascript的命令模式 和单例模式

chenzhicai
 chenzhicai
发布于 2014/06/17 16:15
字数 487
阅读 255
收藏 7

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设计模式入坑

JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...

小小小8021
10/18
0
0
你需要了解的23种JavaScript设计模式

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

java高级架构牛人
06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 安装PHP5和PHP7

安装PHP5 下载解压二进制包 [root@test-a src]# cd /usr/local/src/[root@test-a src]# wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2[root@test-a src]# tar jxvf php-5.6......

野雪球
51分钟前
3
0
windows上类似dnsmasq的软件Dual DHCP DNS Server

官网地址:http://dhcp-dns-server.sourceforge.net/官网定向的下载地址:https://sourceforge.net/projects/dhcp-dns-server/files/ 设置参考地址:http://blog.51cto.com/zhukeqiang/18264......

xueyuse0012
今天
3
0
LinkedHashMap源码解析

前言 HashMap中的元素时无序的,也就是说遍历HashMap的时候,顺序和放入的顺序是不一样的。 如果需要有序的Map,就可以采用LinkedHashMap. LinkedHashMap通过维护一个包含所有元素的双向链表,...

grace_233
今天
3
0
初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
5
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部