简单的命令行模式

命令模式主要对操作和具体的实现进行解耦。我们只需告诉系统我们需要什么操作,而不关心具体是怎么怎么实现了这个操作。这样当我们需要修改对外的接口时也不会影响用户的功能。

<!DOCTYPE HTML>
<html style="height: 100%">
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%">


<!--<script type="text/javascript" src="jquery-2.2.3-unzip.js">-->
</script>
<script type="text/javascript" >
var sqlOperation={
id:0,//数据唯一索引
db:{},//数据存储对象
argumentsConfig:{select:1,add:1,delete:1},//配置没种操作的参数个数
methodConfig:{select:"query"},//把旧的接口改成新的接口名,通过配置我们不需要改变对外的接口
add:function(data){

this.db[++this.id]=data;
return this.id;
},
delete:function(id){
if(id=="all"){
this.db={};
return;
}
 this.db[id] && delete this.db[id];

},
/*
select:function(id){
if(id=="all"){
console.log(this.db);
}
else{
console.log(this.db[id])
}
},
*/
query:function(id){
if(id=="all"){
console.log(this.db);
}
else{
console.log(this.db[id])
}
},
execute:function(cmd){
var needNum=this.argumentsConfig[cmd];//获取操作所需的操作数个数
var realArg=Array.prototype.slice.call(arguments,1);//获取用户实际传进来的参数个数

if(needNum ^ realArg.length){//异或比较,如果参数个数不一样则返回1,if成立给用户返回false
return false;
}
var  method=this.methodConfig[cmd];
//1,查看接口名有没有修改过,如果有的话判断新的接口名是否存在,存在的话就直接调用,调用完毕通过设置1保证后面的代码不会执行.
//2.如果method或者this[method]为假,则直接调用this[cmd].apply(this,realArg)
(method && this[method] && (this[method].apply(this,realArg)  || 1)) || this[cmd].apply(this,realArg)
}
}
sqlOperation.execute("add","sasasa");
sqlOperation.execute("add","sasasa");
sqlOperation.execute("add","sasasa");


sqlOperation.execute("delete",1);
sqlOperation.execute("select","all");
</script>
</html>

以上代码实现了一个简单的及时数据库功能,利用命令行模式,用户永远可以使用唯一的接口execute执行add,delete,select命令,而不用关心最后具体调用的接口。我们可以在具体的代码实现中随便改动而不影响用户的操作,否则,如果我们对外提供的是add,delete等接口,如果有一天我们需要改这个接口的名字,那会导致用户所有用到该接口的代码都需要修改。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值