Firefox OS之系统简介(二)

来源:互联网 发布:北京电信云计算在哪里 编辑:程序博客网 时间:2024/05/09 11:25

          上篇文章简单讲解了mozilla的Firefox OS系统简介和Firefox设计准则之一--------------分离界面和实现。本文讲解Firefox设计准则之二------------针对接口编程。

           http://blog.csdn.net/rony2012/article/details/7969706         点击打开链接

2. 针对接口编程

        Mozilla整个设计是基于组建对象模型(COM)的,而组建对象模型(COM)的主要特点就是针对接口编程。在《设计模式》中,作者把针对接口编程作为设计的首要准则。针对接口编程,把模块的使用者和实现这之间的耦合降到最小,一大到信息隐藏和隔离变化的目的。而且在XPCOM的帮助下,组建可以动态替换或者增加,具有更强的灵活性。其中的角色可以用下图来表示:

        工厂(Factory)通常用接口指针来调用接口的实现,这样调用者就不必了解实现者的细节了。然而创建接口的实例时,只有知道接口的实现才能创建接口的实例。这是一个矛盾的情节,如何才能把使用者和实现这完全隔离开就是一个难题。工厂模式(Factory)把接口的实现和创建独立开来了。可以说工厂是针对接口编程的基本条件之一吧。

       Mozilla中,每个组件都要实现工厂接口,才能被使用者调用。考虑到实现工厂的代码类似,则Mozilla实现了一个为GenericFactory的通用Factory。在GenericFactory的帮助下,各个组件只要实现了一个简单的结构ComponentInfo就行了。

       组件管理器 工厂(Factory)虽然把组件的创建分离了,但使用者与实现这的工厂却又耦合起来了。这样看来,我们似乎又回到了起点,不过这次不一样了,各个组件的Factory都实现了IFactory接口,可以由一个专门的管理器来管理。通过组件名称或ID可以找到组件的Factory,通过接口ID又可以让Factory创建接口的实例。

      IDL是接口定义语言(Interface Definition Language)的简称,他在组件对象模型(COM)中也起着重要的作用。在C语言中,我们可以用结构(struct)来描述接口,一个只包含函数指针的结构(struct)可以看做一个接口。在C++中,我们可以用类来描述接口,一个只包含纯虚函数的类可以看作一个接口。既然每种语言都有自己描述接口的方法,为什么还要IDL?这是因为每种语言描述接口的方式不一致,所以才需要一个独立于任何编程语言接口定义语言(IDL)。IDL是一个中间语言,它不能直接被编程语言使用,但在IDL的编译器的支持下,它可以被转换成不同的形式,在多种语言中使用。比如转换成头文件,可以在C/C++中使用,可以转换成类型库,可以在javascript等解释语言中使用。IDL在XPCOM实现语言无关性中,起了不可或缺的作用。