JS 设计模式--接口实现
来源:互联网 发布:面向对象 数据库设计 编辑:程序博客网 时间:2024/05/19 20:58
今天来讨论一下JavaScript中接口的实现.
最常用的莫过于‘鸭式辨型法实现接口’(较为完美的实现方法)
其实,类是否声明自己支持哪些接口并不重要,只要它具有这些接口中的方法就行。鸭式辨型(这个名称来自James Whitomb Riley的名言:“像鸭子一样走路并且嘎嘎叫的就是鸭子”)正是基于这样的认识。它把对象实现的方法集作作为判断它是不是某个类的实例的唯一标准。这种技术在检查一个类是否实现了某个接口时也可大显向身手。这种方法背后的观点很简单:如果对象具有与接口定义的方法同名的所有方法,那么就可以认为它实现了这个接口。你可以用一个辅助函数来确保对象具有所有必需的方法:
1.声明一个接口类
/**
*接口类的参数?几个
* 参数1:接口名
* 参数2:接收方法的集合(数组)
*/
var Interface = function(name , methods){ var self = this; //判断接口的参数个数 if (arguments.length !=2) { throw new Error('the instance interface constructor arguments should be 2'); }; self.name =name; //this.methods = methods; self.InterfaceMethods = []; methods.forEach(function(value,index){ if (typeof value !== "string"){ throw new Error('the name of method is wrong'); } self.InterfaceMethods.push(value); });}
2.定义接口
var CompositeInterface = new Interface('CompositeInterface',['add','delete']);``var FormItemInterface = new Interface('FormItemInterface',['update','select']);
3.具体的实现类
var CompositeImpl = function(){}实现接口的方法 implements methodsCompositeImpl.prototype.add = function(obj){ alert("add");}CompositeImpl.prototype.delete = function(obj){ alert("delete");} CompositeImpl.prototype.update = function(obj){ alert("update");}/*CompositeImpl.prototype.select = function(obj){ alert("select");}*/
4.检验接口里的方法
//如果检测通过,不做任何操作;不通过,则抛出异常。
//这个方法的目的就是 检测方法的
Interface.ensureImplements =function(object){ //如果接受参数长度小于2 ,证明还有任何实现的接口 if (arguments.length < 2) { throw new Error('The Interface has no implement class'); }; //获得接口的实例对象 for (var i = 1, len= arguments.length; i < len; i++) { var instanceInterface =arguments[i]; //判断参数是否为 接口类的类型 if (instanceInterface.constructor !==Interface) { throw new Error('The arguments constructor is not Interface Class'); }; for (var j = 0, len2 =instanceInterface.InterfaceMethods.length ; j <len2; j++ ) { //用一个临时变量 ,接收每个方法的名字(注意为字符串类型) var methodName = instanceInterface.InterfaceMethods[j]; //object[key] 获得方法 if (!object[methodName] || typeof object[methodName] !== 'function') { throw new Error('the method"'+ methodName+'"is not found'); } } }}
5.测试
var c1 =new CompositeImpl();Interface.ensureImplements(c1,CompositeInterface,FormItemInterface);c1.add();
输出结果
the method select is not found
阅读全文
0 0
- JS 设计模式--接口实现
- 【js设计模式笔记---接口】
- 【js设计模式笔记---接口】
- JavaScript设计模式--实现接口Interface
- JavaScript-设计模式之接口的实现
- PHP设计模式之JS实现观察者模式
- Java接口设计模式
- Java接口设计模式
- Java接口设计模式
- 接口及其设计模式
- javascript设计模式--接口
- 【设计模式】之接口
- Java设计模式---接口
- Java接口设计模式
- 接口设计模式
- 接口与设计模式
- JavaScript设计模式-接口
- 常量接口设计模式
- Linux服务器连接不上的几种解决办法
- Tomcat |Eclipse下使用外部配置的Tomcat发布项目
- Java虚拟机内存分配
- Stanford CoreNLP API
- C++ 11 复习要点
- JS 设计模式--接口实现
- JavaWeb(七)Cookie,EL表达式,标准标签库
- 周中训练笔记+广西邀请赛1001(8.31)
- Spark 名词解释
- FEC详解一
- 表单元素练习
- 2017年8月31日训练总结
- Spring源码阅读(五)—AOP基础
- layui中弹出一个弹框,通过内嵌页面里的操作关掉整个弹出层窗口