远程对象工厂设计模式

    把一个远程对象注册到rmiregistry注册表,客户就能找到这个远程对象,rmiregistry注册表只能用来注册少量的远程对象。当客户端调用服务器端的远程对象方法时,客户端会向服务器传递参数,服务器端会向客户端传递返回值。RMI规范对参数及返回值的传递做了如下规定:

    (1)只有基本类型的数据,远程对象及可序列化的对象才能作为参数或者返回值进行传递。

      (2)如果参数或返回值是一个远程对象,那么把它的存根对象传递到接收方。也就是说,接收方得到的是远程对象的存根对象。

      (3)如果参数或返回值是可序列化对象,那么直接传递该对象的序列化数据。也就是说,接收方得到的是发送方的可序列化对象的复制品。

       (4)如果参数或返回值是基本类型的数据,那么直接传递该数据的序列化数据。也就是说,接收方得到的是发送方的基本类型的数据的复制品。

下面看一段代码,参数或返回值是可序列化对象:






运行服务器程序结果为:


运行客户端程序结果为:


可以看到flight1.equal(flight2):false,参数为可序列化对象时,得到的是远程对象的两个复制品,不相等。equal方法在客户端被重写了,当参数为远程对象时,因为得到是存根对象,flight1.equal(flight2):true,同一个存根对象。


posted @ 2012-05-17 19:06  Java EE  阅读(264)  评论(0编辑  收藏  举报