js 设计模式-接口

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>

时间: 2024-09-30 10:13:17

js 设计模式-接口的相关文章

JS设计模式(门面模式)

<!--JS设计模式(门面模式)--> // 门面模式的概念:简化API接口 最经典的就是事件 // 做一件事情: 必须要调用2个函数分别是 a , b //案例:获得页面上多个元素并设置css样式 window.onload=function(){ setCss(["div1","div2","div3"],{ background:"blue", color:"#fff" }); } fun

JS 设计模式(工厂模式环境搭建)

<!--引入的核心JS文件--> <script type="text/javascript" src="CommonUtil.js"></script> <script type=text/javascript charset=utf-8> <!--JS设计模式(工厂模式)--> //搭建一个工厂环境 //卖车店 function CarShop(){}; CarShop.prototype={ cons

JS设计模式(动态工厂模式)

<!--引入的核心JS文件--> <script type="text/javascript" src="CommonUtil.js"></script> <script type=text/javascript charset=utf-8> <!--JS设计模式(细粒度工厂模式)--> //搭建一个工厂环境 买什么车——(去什么店)卖车的店——卖车——生产车 //卖车店 super Shop 只有卖车的方

【转】JS设计模式开篇

(原文地址:http://blog.chinaunix.net/uid-26672038-id-3904513.html) 本文主要讲述一下,什么是设计模式(Design pattern),作为敲键盘的我们要如何学习设计模式.设计模式真的是一把万能钥匙么? 各个代码的设计模式几乎每个人都知晓,就算不会那也一定在一些装逼的大牛(部分而已)口中听过.但可能很少有人知道设计模式的由来: 设计模式该术语源自Erich Gamma等人在上世纪90年代从建筑设计领域引入到计算机科学的(很难想象到底有多大关联

读书笔记:js设计模式

面向过程编程,面向对象编程和函数式编程> 定义一个类方法1:function Anim(){ } Anim.prototype.start = function(){ .. };Anim.prototype.stop = function(){ .. }; 或者方法2:function Anim(){ .. }Anim.prototype = { start: function(){.. }, stop: function(){ .. }, constructor: Anim} 或者方法3://

js设计模式:工厂模式、构造函数模式、原型模式、混合模式

一.js面向对象程序 var o1 = new Object(); o1.name = "宾宾"; o1.sex = "男"; o1.age = "27"; o1.msg = function(){ console.log("姓名:"+this.name+"  性别:"+this.sex+"  年龄:"+this.age); } var o2 = new Object(); o2.nam

JS设计模式入门和框架中的实践

JS设计模式入门和框架中的实践 在编写JS代码的过程中,运用一定的设计模式可以让我们的代码更加优雅.灵活. 下面笔者就结合诸如redux的subscribe.ES6的class.vue里面的$dispatch.jquery里面的on/off来给大家简单介绍下设计模式在这些库.语法和框架中的使用. 设计模式解决的问题 设计模式并不是很玄乎的知识,很多同学在编写JS代码的时候已经在不经意间用了不少设计模式了. 笔者认为把设计模式单独抽象出来探讨,就和算法中抽象出来冒泡.排序一样,是为了描述一种常用的

js 设计模式学习(1)

最近一个人外出旅行 顺便在那座城市买了一本关于JS设计模式的书 供无聊的时候阅读 却发现小有收获 旅游回来以后立马写下心得 做了一个地图 并以此总结此次旅行的经过的地方 尝试1: 尝试写JS类 1 var TianDiTu = function (lat, lng, zoom) { 2 if (this instanceof TianDiTu) { 3 var zoomSize = { maxZoom: 18, minZoom: 5 }, 4 normalm = L.tileLayer.chin

JS设计模式(桥接模式)

<!--引入的核心JS文件--> <script type="text/javascript" src="CommonUtil.js"></script> <script type=text/javascript charset=utf-8> <!--JS设计模式(桥接模式)--> //桥接模式:主要是把抽象和现实分离开来,使他们独立开来 //应用场景:事件监听回掉机制 window.onload=func