设计模式之Value Object模式
来源:互联网 发布:dm 数据挖掘 编辑:程序博客网 时间:2024/06/05 16:41
在J2ee软件开发中,通过会对系统模块进行分层。展示层主要负责数据的展示,定义数据库的UI组织模式;业务逻辑层负责具体的业务逻辑处理,持久层通常指数据库以及相关操作。在一个大型系统中,这些层次很有可能被分离,并部署在不同的服务器上。而在两个层次之间,可能通过远程调用RMI等方式进行通信。
RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。由于JRMP是专为Java对象制定的,Java RMI具有Java的”Write Once,Run Anywhere”的优点,是分布式应用系统的百分之百纯Java解决方案。用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。
RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。
以下是通过RMI来进行的案例代码:
public class Order { private int orderid; private String clientName; private int number; private String produnctName; //此处省略掉get,set方法 }
import java.rmi.Remote;import java.rmi.RemoteException;/** * RMI服务器的接口实现,其中getOrder()方法取得了一个value Object * 而其他方法则取得order的一部分信息 * @author txy * */public interface IOrderManager extends Remote{ public Order getOrder(int id) throws RemoteException; public String getClientName(int id) throws RemoteException; public int getNubmer(int id) throws RemoteException; public String getProdName(int id) throws RemoteException;}
public class OrderManager extends UnicastRemoteObject implements IOrderManager{ /** * 只是接口的简单实现,返回数据 */ private static final long serialVersionUID = 1L; protected OrderManager() throws RemoteException { super(); // TODO Auto-generated constructor stub } @Override public Order getOrder(int id) throws RemoteException { Order o = new Order(); o.setClientName("billy"); o.setNumber(20); o.setProdunctName("desk"); return o; } @Override public String getClientName(int id) throws RemoteException { // TODO Auto-generated method stub return "billy"; } @Override public int getNubmer(int id) throws RemoteException { // TODO Auto-generated method stub return 20; } @Override public String getProdName(int id) throws RemoteException { // TODO Auto-generated method stub return "desk"; }}
/** * 业务逻辑层的注册开启rmi服务器 * @author txy * */public class OrderManagerServer { public static void main(String[] args){ try { LocateRegistry.createRegistry(1099); //注册rmi端口 IOrderManager usermanager = new OrderManager(); //rmi远程对象 Naming.rebind("OrderManager",usermanager); System.out.println("OrderManager is ready"); } catch (Exception e) { // TODO: handle exception System.out.println("OrderManager server failed: "+e); } }}
public class Test { public static void main(String[] args){ try { IOrderManager usermanager = (IOrderManager)Naming.lookup("OrderManager"); long begin = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { usermanager.getOrder(i); } System.out.println("getOrder spend:"+(System.currentTimeMillis()-begin)); begin = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { usermanager.getClientName(i); usermanager.getNubmer(i); usermanager.getProdName(i); } System.out.println("getOrder spend:"+(System.currentTimeMillis()-begin)); } catch (Exception e) { // TODO: handle exception System.out.println(e); } }}
结果显示,使用getOrder方法相对耗时相对较少,而使用连续3将离散的远程调用 耗时较长,由此可见,对传输数据进行有效的封装,可以明显提长远程方法调用的性能。
- 设计模式之Value Object模式
- 【设计优化】- 正确使用 Value Object 模式
- 设计模式 一 值对象模式(The Value Object Pattern)
- Value Object模式
- 【设计模式攻略】行为型模式之Null Object模式
- java设计模式之Active Object
- [设计模式]null object模式
- 【设计模式】--NULL OBJECT 模式
- ASP.NET设计模式之Query Object模式
- 设计模式之空对象(Null Object)模式
- 设计模式之适配器模式(Adapter Class/Object)
- 设计模式之对象池模式(Object Pool)
- 【设计模式 - 21】之空对象模式(Null Object)
- Java 多线程编程设计模式之Immutable Object 模式
- Null Object 设计模式
- Null Object设计模式
- Object Null 设计模式
- Object-C 设计模式
- QT 让生成文件更干净
- FastJson最新.jar下载
- 文章标题
- 图像分割之边缘检测
- 操作系统面试题(更新中。。)
- 设计模式之Value Object模式
- 平台从网页登陆需要写入的注册表项
- 字符串中的部分字符替换
- sql语句中count(*),count(1),count(id)区别详解
- 数据库位图索引的优缺点
- 双三次插值算法的OpenGL实现
- php标准的注释方法
- javascript之DOM操作
- jquery百度搜索框的搜索效果插件