javascript虽然也是面向对象的语言,但是并没有实现像java,php这些实现了对接口、继承等这些面向对象特性的内置支持。在使用js为前端主体开发大型项目的时候,不使用设计模式来开发到后期就会觉得相当的痛苦。代码的大量冗余,逻辑之间的混乱,可维护性很差。这也是为什么js被诟病不能开发大型项目的原因。但是js是相当灵活的语言,我们可与根据他的词法作用域的性质,来模拟实现面向对象的编程。最开始我们来实现js的接口特性,这也是其他设计模式的基础。
什么是接口:
接口提供了一种用以说明一个对象应该具有哪些方法的手段。尽管它可以说明这些方法的语义,但是不规定这些这些方法的具体实现。
这里上一个PHP接口的例子:
结果例子就很清楚的看到,代码中InterDemo只是声明了这个接口有一个interFunc这个方法。但是这个方法怎么实现的,是在ClassDemo中来呈现的。
在javascript中模仿接口:
废话不多说,先上代码,然后再解释:
代码中注释已经很清楚了,这里说下几个关键的函数:
- Interface:其实是定义一个我们所谓的接口类型。在我们项目中,js接口就是这种形式,他有两个属性:接口的名字,方法名集。以后任何时候想声明一个接口,只要实例化一个对象就可以。
- Interface.ensureImplement:工具函数,这个是使用js来模拟接口的一个核心函数。这个函数接收两个参数:obj和inter。obj就是我们的将要使用的一个对象,inter就是我们提供来检查obj是不是满足接口定义的接口对象。只有满足才程序才会继续进行,否则会抛出错误。
- ObjFormatter:工具函数,产生满足接口定义的对象,上面的ensureImplement就是在这里发挥作用。
使用接口的好处:
- 接口可以告诉程序员一个类实现了哪些方法,从而帮助其使用这个类。
- 接口可以稳定不同类之间的通信方式。如果事先知道了接口,在项目集成的过程中就会少初相问题。协同开发的时候,一个程序员就可以事先说明他需要一个类具有哪些特性和操作。他就可以定义一个接口,然后把他一觉给其他人,其他人可以随心所欲的编写这个类,但是这个类一定要包含我接口里定义的方法。
- 测试也会变得更清晰,由于js是弱类型语言,类型不匹配错误很难跟踪。但是使用接口可以把这些错误限制在对象本身范围内。
使用接口的坏处:
- 显而易见,对于在客户端运行的代码,系统资源消耗的增多是不是可接受的,看一看ensureImplement函数的实现,是不是有点闹心呢。
- 要求团队的整体水平较高。
- js无法强制的要求其他程序员也使用接口。想java,php这种如果定义了一个接口,当这个接口的方法没有被实现的时候,IDE会提示编译不过。但是js不一样,全凭自觉。这就又回到了第二条。
注:
主体知识来自于《javascript设计模式》这本书,添加了自己的修改与心得。
转载请注明出处:http://hi.csdn.net/duran1986