码迷,mamicode.com
首页 > Web开发 > 详细

js 设计模式-接口

时间:2015-06-03 19:11:49      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

js模拟java接口检测函数;确保子类实现接口中的方法:(出自js设计模式)

上代码:

<script type="text/javascript" >

/**
name:接口名称;字符串类型
arr_method:接口中的方法名称;数组形式[‘method1‘,‘method2‘,····]

可以定义接口名称和接口定义的方法名称,
**/
var Interface = function(name,arr_method){
  if(arguments.length!=2){
    throw new Error("参数不匹配,该接口要求两个参数,实际接口个数为"+arguments.length+"!");
  }
  this.name = name;
  this.methods = [];
  for(var i=0,len=arr_method.length;i<len;i++){
    if(typeof arr_method[i]!=="string"){
      throw new Error("传入的函数名称应当为string类型的!");
  }
  this.methods.push(arr_method[i]);
  }
}
//检测对象是否实现接口中的所有方法(参数必须大于两个,第一个为待检测对象,其他的为要实现接口(是Interface类的实例);本函数检测该传 入对象是否实现这些接口的所有方法)
Interface.enSureImplements = function(o){
  if(arguments.length<2){
    throw new Error("函数参数不匹配!必须包含待检测对象和至少一个接口 ");
  }
  for(var i=1,len=arguments.length-1;i<len;i++){
    var inter = arguments[i];
    if(inter.constructor!==‘Interface‘){
    throw new Error(i+"需要两个或者两个以上的实现Interface类的实例");
  }
  for(var j=0,jlen=inter.methods.length;j<jlen;j++){
    var meth = inter.methods[j];
    if(!o[meth]&& typeof o[method] !==‘function‘){
      throw new Error("该对象没有实现接口:"+inter.name+" 的 "+meth+" 方法! ");
    }
  }
  }
}

//检测这个实例是否实现对应的方法,并执行inteStance中的方法
function interTest(inteStance){
  var play = new Interface("play",["go","pause","stop"]);
  Interface.enSureImplements(inteStance,play);//检测这个类是否实现了接口play中的方法,然后执行inteState中 的方法
  inteStance.go();
  inteStance.pause();
  inteStance.stop();
}

</script>

js 设计模式-接口

标签:

原文地址:http://www.cnblogs.com/happy-rabbit/p/4549724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!