在RMI中应用Factory模式

什么是"factory"?为什么要使用它?
在这里,factory是指实现了factory设计模式的软件逻辑.通常在需要使用一个对象来控制其它对象的创建或存取过程的时候将非常有用.在RMI中使用factory,能够降低在RMI注册表中注册对象的数量.

真实世界的factory示例:
银行
当你前往银行往自己的账户存钱的时候,你并不会径直走到金库,然后打开写有你名字的抽屉,然后把钱放进去,再关上抽屉离开.仔细想想通常的情况.你可能到了银行,和客户经理(Account Manager)交谈,签署一些文件.然后他会给你一些帐单,一本存折,或者银行卡,以方便你在以后使用.

客户经理(Account Manager)就是一个factory.人或者自动提款机(ATM)承担客户经理(Account Manager)的作用,它控制个人账户的创建或者存取操作.

图书馆
让我们在想想如何将一本书,一张激光唱片或者录像带从图书馆借回家的.在检查任何资料之前,你必须首先从馆员那里得到借阅卡(library card).在这里,馆员可以被看作是借阅卡(library card)的factory,因为馆员控制着新的借阅卡(library card)实例的产生.
只要得到了借阅卡(library card),你就能进入图书馆,而且带着资料从里面出来也不会引起人们大惊小怪.对不?错!在你准备走出图书馆触发报警系统之前,你必须检查准备带回家的书籍,CD或者录像带.你必须向馆员出示你的借阅卡(library card),馆员会用你的借阅卡(library card)检查是否有欠费,并将这些新借资料的信息注册.在这里,馆员可以被看作是book的factory,因为他控制了书的借阅.

factory如何在RMI中起作用.
正如任何其它的RMI程序一样具有基本的参与元素: server 它用来产生一个或者多个remote对象,它们都实现了remote接口; client 对命名server(RMI注册表)进行访问,得到某个remote对象的引用; rmiregistry, 它帮助 client与server的初始的连接.

下面的图显示了流程,考虑下面的假设条件:
. client了解两个remote接口:Factory和Product
. FactoryImpl实现了Factory接口,并且ProductImpl实现了Product接口



1.FactoryImpl通过rmiregistry注册或被注册
2.client请求Factory的引用
3.rmiregistry返回FactoryImpl的remote引用
4.client调用FactoryImpl中的remote方法,以获得ProductImpl的remote引用
5.FactoryImpl返回存在的ProductImpl的remote引用,或者基于client请求才建立的ProductImpl的remote引用.
6.client调用ProductImpl中的remote方法.

银行和图书馆如何在RMI中实现?

银行

代码的形式,AccountManager可能是具有一个或者多个remote方法的remote接口.这些方法可能返回实现Account接口的对象.同样的形式,Account可能是接口,其中声明了能够对account实例进行的所有操作.比如存钱或取钱,获得账户余额,列出最近的账户交易.
在RMI中,只有实现AccountManager的实体能够在RMI注册表中注册.AccountManager的实现可能是factory,比如在存款时,返回remote引用(或者串联化的对象实例)给AccountManager的实现.

图书馆
在图书馆示例中,馆员(Librarian)可能是remote接口.它含有一个或者多个可能返回实现了LibraryCard接口的对象的方法.另外,Librarian接口可能具有允许存取书籍,CD,录像带的方法,它实现了Librarian(可借)接口.

在RMI中,只有Librarian实现的实例可能注册到RMI注册表中.Librarian的实现可能是factory,返回remote引用(或者串联化对象实例)到LibraryCard的实现和Loanable对象实现.
 
-------------------------------
本文并没有指出银行示例和图书馆示例的具体代码.但是针对factory模式的应用给出了很好的说明.
翻译:nirvana_li
日期:06-09-04
原文出处: http://java.sun.com/j2se/1.4.2/docs/guide/rmi/Factory.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值