远程代理模式-Remote Proxy

服务端通过rmi将对象注册到远程服务, 客户端使用时, 只需要通过rmi协议获取即可, 只要接口统一, 即可不需要知道内部具体实现, 直接调用使用.

CompareHelper接口

这里就是客户端和服务端统一的接口, 只需要服务端根据这个接口实现相应的功能, 然后注册上去, 客户端就可以根据这个接口来使用相应的功能.

import java.rmi.RemoteException;
import java.rmi.*;/*** 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法须抛出RemoteException异常*/
public interface CompareHelper<T> extends Remote {/*** 比较 object1 和 object2 的大小,* 如果object1大, 那么返回true* 如果object2大, 那么返回false*/boolean compare(T object1, T object2) throws RemoteException;/*** 将object2的值连接到object1的后面*/T append(T object1, T object2) throws RemoteException;
}

IntegerCompareHelper类

CompareHellper接口的其中一种实现. 用于处理Integer类型.

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;public class IntegerCompareHelper extends UnicastRemoteObject implements CompareHelper<Integer> {protected IntegerCompareHelper() throws RemoteException {}@Overridepublic boolean compare(Integer object1, Integer object2) throws RemoteException {return object1 - object2 > 0;}@Overridepublic Integer append(Integer object1, Integer object2) throws RemoteException {return Integer.valueOf(object1.toString() + object2.toString());}
}

StringCompareHelper类

CompareHellper接口的其中一种实现. 用于处理String类型.

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;public class StringCompareHelper extends UnicastRemoteObject implements CompareHelper<String> {protected StringCompareHelper() throws RemoteException {}@Overridepublic boolean compare(String object1, String object2) throws RemoteException {return object1.compareTo(object2) > 0;}@Overridepublic String append(String object1, String object2) throws RemoteException {return object1 + object2;}
}

Server类

用于注册服务到远程服务上.

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;/*** 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。*/
public class Server {private static final String HOST = "localhost";private static final int PORT = 9090;public static void main(String args[]) {try {//创建2个对象, 准备将这个两个对象作为远程对象注册CompareHelper stringCompareHelper = new StringCompareHelper();CompareHelper integerCompareHelper = new IntegerCompareHelper();LocateRegistry.createRegistry(PORT);//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)// 本例子中就是 "rmi://localhost:9090/XXXXXXCompareHelper"Naming.bind("rmi://" + HOST + ":" + PORT + "/StringCompareHelper", stringCompareHelper);Naming.bind("//" + HOST + ":" + PORT + "/IntegerCompareHelper", integerCompareHelper);System.out.println("---->远程对象绑定成功!");} catch (RemoteException e) {System.out.println("创建远程对象发生异常!");e.printStackTrace();} catch (AlreadyBoundException e) {System.out.println("发生重复绑定对象异常!");e.printStackTrace();} catch (MalformedURLException e) {System.out.println("发生URL畸形异常!");e.printStackTrace();}}
}

Client类

用于调用远程服务.

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;/*** 客户端测试,在客户端调用远程对象上的远程方法,并返回结果。*/
@SuppressWarnings("unchecked")
public class Client {public static void main(String args[]) {try {CompareHelper compareHelper;compareHelper = (CompareHelper) Naming.lookup("rmi://localhost:9090/StringCompareHelper");System.out.println(compareHelper.append("你好", "哈哈哈"));System.out.println(compareHelper.compare("abc", "ioi"));compareHelper = (CompareHelper) Naming.lookup("rmi://localhost:9090/IntegerCompareHelper");System.out.println(compareHelper.append(6379, 8080));System.out.println(compareHelper.compare(435, 666));} catch (NotBoundException | MalformedURLException | RemoteException e) {e.printStackTrace();}}
}

如何运行呢?

先运行Server.java里的main方法来注册服务, 再运行Client.java里的main方法来进行相应服务的获取和调用.

转载于:https://www.cnblogs.com/noKing/p/9069888.html

远程代理模式-Remote Proxy(Java实现)相关推荐

  1. Android常见设计模式——代理模式(Proxy Pattern)(二)

    文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...

  2. C++设计模式——代理模式(proxy pattern)

    一.原理讲解 代理模式也可以称作为委托,对对象的业务的委托. 1.1意图 为其它对象提供一种代理,以控制对这个对象的访问. 1.2应用场景 1.2.1远程代理(remote proxy) 为一个对象在 ...

  3. JAVA设计模式(09):结构型-代理模式(Proxy)

    代理模式是经常使用的结构型设计模式之中的一个,当无法直接訪问某个对象或訪问某个对象存在困难时能够通过一个代理对象来间接訪问,为了保证client使用的透明性,所訪问的真实对象与代理对象须要实现同样的接 ...

  4. 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理

    这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...

  5. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  6. 设计模式笔记15:代理模式(Proxy Pattern)

    一.代理模式的内容        代理模式为另一个对象提供一个替身或占位符以访问这个对象.         给某一个对象提供一个代理,并由代理对象控制对原对象的引用.代理模式的英文叫做Proxy或Su ...

  7. 从王者荣耀看设计模式(远程代理模式)

    从王者荣耀看设计模式(远程代理模式) 一.简介 每位王者荣耀玩家都有一个属于自己的游戏账号.为了提升游戏等级或者增加游戏体验感,会存在多个游戏玩家同时共享一个游戏账号的情况.当一位玩家使用账号正在游戏 ...

  8. Net设计模式实例之代理模式(Proxy Pattern)

    一.代理模式简介(Brief Introduction) 代理模式(Proxy Pattern)对其他对象提供一种代理以控制对这个对象的访问. 二.解决的问题(What To Solve) 1.远程代 ...

  9. Android常见设计模式——代理模式(Proxy Pattern)

    文章目录 1. 前言 2. 代理模式(Proxy Pattern) 2.1 静态代理模式 2.2 动态代理模式 3. Android 中的代理模式 3.1 Retrofit中的代理模式(没有被代理者) ...

最新文章

  1. WifiP2pService工作流程
  2. mysql sql 事务写作_mysql中的事务
  3. php结课答辩要求,毕业论文答辩的基本要求和评分标准
  4. 使用frameset时的target属性
  5. 基于协同训练的半监督文本分类算法
  6. WordPress,SAP Kyma和微信三者的集成
  7. Django框架——中间件
  8. discuz设置用户每天回帖数_如何用Redis统计独立用户访问量,除了Hash跟Bitset,还有这个...
  9. 三段话搞明白什么是Krylov子空间迭代法
  10. 计算机 仿真 流体力学剪切应力,基于人体血管B型主动脉夹层三维建模及血流动力学仿真研究...
  11. 流氓软件卸载神器geek
  12. 东方精工、普莱德商誉“罗生门”,谁在扯谎?
  13. 医保种类及医疗保险待遇
  14. 神经网络中Epoch、Iteration、Batchsize相关理解和说明
  15. 抖音很火的小程序表白html,最近抖音很火的表白小程序写法C#版
  16. 教你如何实现网页自由!
  17. 使用C#压缩解压rar格式文件
  18. 服务网格领域的百花齐放
  19. 计算机毕设(附源码)JAVA-SSM基于Web美食网站设计
  20. Juniper SRX NAT46/NAT64配置

热门文章

  1. python有道翻译接口翻译页面-tornado框架学习及借用有道翻译api做自动翻译页面...
  2. python中国大学排名爬虫写明详细步骤-python网络爬虫入门实例:中国大学排名定向爬虫...
  3. python是什么编程教程-Python 从不懂到入门
  4. python是个啥-Python是个什么鬼?师兄用它一年发表5篇SCI!
  5. python 命令行参数-python获取命令行参数的方法(汇总)
  6. python笔记基础-Python基础教程学习笔记-1
  7. 在哪里可以免费学python-在合肥哪里可以学Python
  8. python能做什么项目好-python能做什么项目
  9. python学精通要多久-精通python需要多久
  10. python培训班价格-Python培训班一般多少钱?学费多少?