《javascript设计模式》--接口
关于javascript设计模式书中的接口,记录如下
//TODO 增加了一个判断条件,可以只在生产环境中调用
接口var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error('Interface constructor call with' + arguments.length + 'arguments,but expecter exactly 2.')
}
this.name = name;
this.methods = [];
for(var i = 0, len = methods.length; i < len; i++){
if(typeof methods[i] !== 'string'){
throw new Error('Imterface constructor expects method names as to be passed in as a string.')
}
this.methods.push(methods[i]);
}
};
//static class method
Interface.ensureImplements = function(obj){
if(arguments.length < 2){
throw new Error('Function Interface.ensureImplements called with'+arguments.length +'arguments,but expected at least 2');
}
for(var i = 1, len = arguments.length; i < len; i++){
var interface = arguments[i];
if(interface.constructor !== Interface){
throw new Error('Function Interface.ensureImplements expects arguments two and above to be instances of Interface.')
}
for(var j = 0, methodsLen = interface.methods.length; j < methodsLen; j++){
var method = interface.methods[j];
if(!obj[method] || typeof obj[method] !== 'function'){
throw new Error('Function Interface.ensureImplements: obj does\'s implement the '+ interface.name + ' interface.Method '+method +' was\'s found')
}
}
}
//TODO pass
return true;
};
用法如下:
接口//TODO define Interface
var Composite = new Interface('Composite',['add','remove','getChild']);
var FormItem = new Interface('FormItem',['save']); //TODO checkout implements
function addForm(formInstace,isDevelop){
isDevelop && Interface.ensureImplements(formInstace, Composite, FormItem)
//其他使用add,remove,getchild,save函数的代码段
}
//CompositeForm class
var CompositeForm = function(id, method, action){};
CompositeForm.prototype = {
add: function(){},
remove:function(){},
getChild:function(){}
,save:function(){}
}; var testCompositeForm = new CompositeForm()
addForm(testCompositeForm,true)

2 var Composite = new Interface('Composite',['add','remove','getChild']);
3 var FormItem = new Interface('FormItem',['save']);
4
5 //TODO checkout implements
6 function addForm(formInstace,isDevelop){
7 isDevelop && Interface.ensureImplements(formInstace, Composite, FormItem)
8 //其他使用add,remove,getchild,save函数的代码段
9 }
//CompositeForm class
var CompositeForm = function(id, method, action){};
CompositeForm.prototype = {
add: function(){},
remove:function(){},
getChild:function(){}
,save:function(){}
};
var testCompositeForm = new CompositeForm()
addForm(testCompositeForm,true)
use
《javascript设计模式》--接口的更多相关文章
- 读书笔记之 - javascript 设计模式 - 接口、封装和链式调用
javascript 采用设计模式主要有下面的三方面原因: 可维护性:设计模式有助于降低模块之间的耦合程度.这使代码进行重构和换用不同的模块变得容易,也使程序员在大型项目中合作变得容易. 沟通:设计模 ...
- JavaScript设计模式接口
JavaScript中实现接口的方法有三种: 第一种,使用注释的方法实现接口 特点:(1)最简单,但是功能最弱(2)利用 interface和 implement"文字"(3)把他 ...
- javascript设计模式开篇:Javascript 接口的实现
javascript语言不像java. c#. c++等面向对象语言那样有完备的接口支持,在javascript中,接口的实现有三种方式,分别为注释描述.属性检查.鸭式变形.注释描述实现起来最为简单, ...
- 《JavaScript设计模式 张》整理
最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- 常用的Javascript设计模式
<parctical common lisp>的作者曾说,如果你需要一种模式,那一定是哪里出了问题.他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案. 不管是弱类型 ...
- JavaScript设计模式学习笔记
1 JavaScript设计模式深入分析 私有属性和方法:函数有作用域,在函数内用var 关键字声明的变量在外部无法访问,私有属性和方法本质就是你希望在对象外部无法访问的变量. 特权属性和方法:创建属 ...
- JavaScript设计模式:读书笔记(未完)
该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...
- JavaScript的学习--JavaScript设计模式的总结
这篇博客只是自己对设计模式的理解的备忘~ 看完了<JavaScript设计模式>这本书,一直没有写博客记录一下,最近抽出时间来重读了一下,就顺便记录一下~ 如果你只是想粗略了解一下Java ...
随机推荐
- ubuntu 14.0 下github 配置
一:创建Repositories 1:首先在github下创建一个帐号.这个不用多说,然后创建一个Repositories. 2:然后在ubuntu下安装git相关的东东: 1 sudo apt-ge ...
- ubuntu 14.下 netbeans 自体锯齿 消除
Ubuntu下NetBeans消除字体锯齿的方法 在netbeans.conf 文件的netbeans_default_options的最后添加 -J-Dswing.aatext=true -J-Da ...
- Purpose of requirePermission attribute (web.config)
requirePermission 属性的含义 https://msdn.microsoft.com/en-us/library/system.configuration.sectioninforma ...
- 生产环境下Centos 6.5优化配置 (装载)
本文 centos 6.5 优化 的项有18处: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行SSH链接 3.更新系统源并且升级系统 4.系统时间更新和设定定时任 5. ...
- Spring碎点知识
1.依赖注入:不仅可以为Bean注入普通的属性值,还可以注入其他Bean的作用.通过配置文件组织在一起,这里的Bean是Java对象 说明:关于依赖注入与控制反转的这两个名字,表达的都是同一个意思,只 ...
- obj文件的连接问题以及tlib的基本用法
1.基础研究 用tcc将程序编译为.obj文件. 这里也可以使用tcc -linclude run.c来将run.c文件编译成run.obj文件. 再用tcc对下面的程序进行编译链接,发现提示错误: ...
- 关于tcc、tlink的编译链接机制的研究
1.学习过程 在c:\下建立文件夹c,并将编译器tcc.exe.连接器tlink.exe.相关文件c0s.obj.cs.lib.emu.lib.maths.lib放入文件夹中. 要搭建一个简单的C语言 ...
- Android 每隔3s更新一次title
MainActivity.java public class MainActivity extends Activity { private static int i=0; @Override pro ...
- 【转】如何判断CPU是大端还是小端模式
原文网址:http://blog.csdn.net/ysdaniel/article/details/6617458 如何判断CPU是大端还是小端模式 http://blog.sina.com.cn/ ...
- java并发6-小结
为什么需要并发 并发其实是一种解耦合的策略,它帮助我们把做什么(目标)和什么时候做(时机)分开.这样做可以明显改进应用程序的吞吐量(获得更多的CPU调度时间)和结构(程序有多个部分在协同工作).做 ...