java设计模式之代理模式(Proxy):远程代理

概述

       普通对象可以通过公共接口完成自己所需完成的工作。然而,有些对象却由于某些原因无
法旅行自己日常的职责。例如有的对象加载时间过长,有的对象运行在其他计算机上,或者
徐亚拦截发送到对象的消息等。对于这些场景,我们可以引入代理对象,通过它承担客户端需
要的职责,并将对应的请求转发给底层的目标对象。

       代理模式的意图是通过一个代理或者一个占位符来控制对该对象的访问。

远程代理

        如果需要调用的对象方法运行在其他机器上,不能直接调用该方法,这就需要另辟蹊径。
可以在远程机器上开一个套接字(Socket),并设计一些协议来与远程对象之间进行消息传输。
理想情况下,这种方案可以使你像在本地一样传输消息。可以调用代理对象的方法,将对真实
对象的调用转发给远程机器。这种方案其实已经被实现,例如java远程方法调用(RMI)上。

        RMI使客户类可以很容易地获取代理对象,并且转发给另一台电脑的目标对象。企业版
JavaBeans(EJ)规范是一个非常重要的行业标准。RMI属于其中一部分,因此,很有必要了
解它。无论行业标准如何改进,我们可以预见,代理模式始终会应用在分布式计算中。而RMI
为这种模式的实践提供了一个很好的范例。

代码示例

我们现在来开始一个简单的RMI实践:用java代码使一个对象方法可以在另一台机器上被调用,即本地对象代理远程对象。

1,首先服务端工程里,创建一个接口IUser,使IUser接口继承自Remote,定义远程接口,抛出RemoteException异常

2,创建实现类UserImpl继承UnicastRemoteObject类,实现IUser接口

3,创建main方法开启服务

执行结果:

服务端本地调用:123的名称
开始启动服务…
服务启动成功…

4,然后,我们来看看客户端,工程里面新建IUser接口,内容与服务端的IUser接口完全相同,且必须保证包路径与服务端的相同

5,新建客户端Main方法,测试远程连接和调用

执行结果:

客户端远程调用:1314的名称

 
参考书籍:
《Java设计模式(第2版)中文版》

 


guolin

guolin

相信世界,向往美好,记录成长过程,分享个人心得,充实平凡生活。 网站信条:因为喜欢,所以热爱。

发表评论

电子邮件地址不会被公开。 必填项已用*标注