是Component Object Model
(组件对象模型)的缩写。BREW
基本上遵从COM
这一组件构架的。组件架构的一个优点就是应用可以随时间的流逝而发展进化,除此之外,使用组件还有一些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以及分布式组件等。
的COM
属性
原本是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种软件开发技术。在COM
构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM
与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块等等。
中所提供的服务实际上是一些小的二进制可执行程序形成的组件,它们可以给应用程序、操作系统以及其他组件提供服务。开发自定义的BREW
组件(例如,BREW
扩展类)就好像是开发动态的、面向对象的API
。多个BREW
对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。
实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。使用组件的种种优点直接来源于可以将它们动态的插入或卸出应用。为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。
可以在运行时刻同其他组件连接起来构成某个应用程序,可以动态的插入或卸出应用,是动态链接的。BREW
隐藏(封装)其内部实现细节,基于BREW
的应用以二进制的形式发布,可以在不妨碍已有用户的情况下被升级。BREW
的自定义扩展按照一种标准的方式来宣布它们的存在。
中的接口
vtable)。每一个接口成员函数的第一个参数必须为指向这个定义这个接口的组件类型的指针(可以参考一下用C模拟C++的过程,在C++的类定义中,每一个成员函数的第一个参数都是隐含的,即编译系统自动添加的this指针),这是因为接口本身不能独立存在,它必须依附于某个COM组件而存在。因此这个指针可以提供对象实例的属性信息,在调用过程中可以知道是在对那个COM对象进行操作。
图中到圆边方框之前,定义的都是指针,真正的实现要依赖于
COM组件给出的实现,对于客户来说,只需要知道应该调用什么就足够了,但是对于组件来说就必须考虑这样的功能应该怎样实现。接口是客户程序和组件程序之间的桥梁,接口应该具有不变性,并且一个COM对象也应该支持多个接口。
this指针判别是哪个对象调用了成员函数。对于接口的实现也类似,类似于C++中的数据成员,对于指向虚函数表的指针,每个接口指针都有属于自己的一份拷贝,而对于提供功能实现的虚函数表,则共享同一份拷贝。
中的ISHELL_createlnstance
方法使用了对象创建型设计模式的抽象工厂模式,它提供了创建一系列相关或者是相互依赖对象的接口,而无须指定他们具体的类,这样可以只提供BREW
的接口,而在需要的时候根据具体的ClassID
创建具体的实现,一般来说抽象工厂模式有以下的几个优点:
分离了具体的实现和接口:只需指定不同的接口和classlD
,既可成功创建接口对象,而无须关心是何种实现;
有利于更新产品模块:
当有新的模块更新的时候,无须更改程序,只需替换相应的模块实现,这样就可以使用新的模块;
有利于产品的一致性;
由于classID
的唯一性,可以创建指定的对象实现,而不会在有众多实现的应用中出现混乱。
BREW 的设计架构中给予消除了,由于重新启动BREW环境的时候,会对系统范围内的ClassID 予以重新注册,因此当新种类加入的时候,只需要提供确定的ClassID 既可成功创建应用。
转载于:https://blog.51cto.com/wirelesscom/243917
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110833.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...