闯荡在移动互联网的世界中
接上一篇的例子,为了更具体一点,我们考虑这样的case,假设房地产开发商construction A采纳了规划公司design A的方案,打算建造公寓类型的房子CityApartment然后客户A买了一套房子
用ooa方式分析这个case,我抽象这几个实体:规划公司,图纸类型,开发商,房子,买房人然后描述这几件事情:开发商选择设计图纸,盖楼然后销售;买房人根据图纸买房并使用房子
下面是我用java语言来简单描述它:
design A 公司
开发商construction A
客户 costumer A
然后我们把他们分别做成bundleBundle A : design A其manifest中这样描述
Bundle B : construction A其manifest中这样描述
Bundle C : customer C其manifest中这样描述
这样,装入到framework后,framework就会把BundlB和C与BundleA关联起来,正好描述开发商A选择design A的图纸,客户A也不得不选择design A的图纸啦可是,单从这里,我们看不出来,开发商和客户拿同一份图纸干什么。那我们得必须在BundleB和C的实现里面写点东西来说明。
这里给出开发商construction.a.Construction的伪代码:
而客户的代码可以如下:
这样,我们就很清楚的看出,Design A为Construction A和Customer A提供了共同的Apartment定义,才使得他们有交易的可能。于此同时,Construction A和Customer A之间的耦合是非常松的,因为,如果有另外一个开发商onstruction B加入进来也构造了Apartment的对象,Customer就可以通过改变选择条件,轻易的获得B的房子,而客户本身不关心房子是A还是B盖的,这个是典型的面向对象的多态应用。
总的说来,Bundle在framework的帮助下,使得其他bundle使用其类型定义成为可能。service就是在这些共享的类型定义基础上产生的具体对象,而使用这些service对象的bundle,必然也是对应共享类型的使用者。这种类型共享,在osgi里面叫做"class space". framework运行时通过关联bundle之间的类型定义,可以构成一个或多个"class space",而某个bundle在framework里面,只能处在一个"class space"里面,不能同时出现在多个"class space"中。怎么理解这个话呢?请看下一篇,外星人入侵了。
posted on 2007-07-21 22:28 勤劳的蜜蜂 阅读(1716) 评论(1) 编辑 收藏
OSGi最好的开发平台非JXADF莫属,详细参见:http://osgi.jxtech.net 回复 更多评论
Powered by: BlogJava Copyright © 勤劳的蜜蜂