首页 > 代码库 > javascript设计模式2
javascript设计模式2
接口:利 固化一部分代码 弊 丧失js的灵活性
在JavaScript中模仿接口
/*interface Composite{ function add(child); function remove(child); function getChild(index);}interface FormItem{ function save();}*/var CompositeForm=function(id,method,action){ ...};CompositeForm.prototype.add = function(child) { ...};CompositeForm.prototype.remove = function(child) { ...};CompositeForm.prototype.getChild = function(index) { ...};CompositeForm.prototype.save = function() { ...};
改进一下,用属性检查
/*interface Composite{ function add(child); function remove(child); function getChild(index);}interface FormItem{ function save();}*/var CompositeForm=function(id,method,action){ this.implementsInterfaces=[‘Composite‘,‘FormItem‘]; ...};...function addForm(formInstance){ if (!implements(formInstance,‘Composite‘,‘FormItem‘)) { throw new Error("Object does not implement a required interface."); } ...}function implements(Object){ for(var i=1;i<arguments.length;i++){ var interfaceName=arguments[i]; var interfaceFound=false; for(var j=0;j<Object.implementsInterfaces.length;j++){ if (Object.implementsInterfaces[j]==interfaceName) { interfaceFound=true; break; }; } if (!interfaceFound) { return false; }; } return true;}
用鸭式辨型模仿接口
var Composite =new Interface(‘Composite‘,[‘add‘,‘remove‘,‘getChild‘]);var FormItem=new Interface(‘FormItem‘,[‘save‘]);var CompositeForm=function(id,method,action){ ...};...function addForm(formInstance){ ensureImplements(formInstance,Composite,FormItem); ...}
结合第一种和第三种
var Composite =new Interface(‘Composite‘,[‘add‘,‘remove‘,‘getChild‘]);var FormItem=new Interface(‘FormItem‘,[‘save‘]);var CompositeForm=function(id,method,action){ ...};...function addForm(formInstance){ Interface.ensureImplements(formInstance,Composite,FormItem); ...}
Interface类的定义
var Interface=function(name,method){ if(arguments.length!=2){ throw new Error("需要2个参数"); } this.name=name; this.method=[]; for(var i=0,len=methods.length;i<len;i++){ if(typeof methods[i]==‘string‘){ throw new Error("需要是一个字符串"); } this.methods.push(methods[i]); }};Interface.ensureImplements=function(object){ if(arguments.length<2){ throw new Error("至少需要2个参数"); } for(var i=1,len=arguments.length;i<len;i++){ var interface=arguments[i]; if(interface.constructor!=Interface){ throw new Error("需要2个参数,并是Interface的实例"); } for(var j=0,methodsLen=interface.methods.length;j<methodsLen;j++){ var method=interface.methods[j]; if (!object[method]||typeof object[method]!==‘function‘) { throw new Error(‘方法未找到‘); }; } }};
javascript设计模式2
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。