文档章节

javascript的命令模式 和单例模式

chenzhicai
 chenzhicai
发布于 2014/06/17 16:15
字数 487
阅读 257
收藏 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设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
JavaScript 中常见设计模式-单例模式

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

webstack前端栈
2018/05/19
0
0
《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方...

嗨呀豆豆呢
2018/12/25
0
0
JS单例模式《JavaScript设计模式与开发实践》阅读笔记

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

RoyLuo
2018/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

脚本配置java开发环境

@echo off&setlocal enabledelayedexpansion cls @echo "This script is used to registe envionment variables......" @echo. @echo. @echo. set var=%~dp0 set var=%var:~,-1% @echo "regi......

默克鱼
25分钟前
1
0
c++中友元函数理解与使用

在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点。 首先讲友元函数。 (1)友元函数: 1)C++中引入友元函数,是为在该类中提供一个对外(除...

天王盖地虎626
今天
2
0
OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
703
11
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
5
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部