javascript的命令模式 和单例模式
javascript的命令模式 和单例模式
chenzhicai 发表于4年前
javascript的命令模式 和单例模式
  • 发表于 4年前
  • 阅读 240
  • 收藏 7
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 在MVC 和享元模式中我经常和创建一个数据模块。这个模块用的是命令模式和单例模式的思想。有什么数据操作我只要在要操作的地方发出一个命令的可以了。而且很容易多个视图共享数据。

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
粉丝 3
博文 2
码字总数 719
×
chenzhicai
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: