知识大全 Java设计模式之计数代理模式

Posted

篇首语:休言女子非英物,夜夜龙泉壁上鸣。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java设计模式之计数代理模式相关的知识,希望对你有一定的参考价值。

Java设计模式之计数代理模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  描述

     计数代理模式在客户对象调用服务提供者对象上方法的前后执行诸如日志(logging)和计数(counting)一系列附加功能时很有用 计数代理模式建议把这些附加功能封装在一个单独的对象 这个对象就是指计数代理对象 而不是把这些附加的功能实现放到服务提供者的内部 良好的对象设计的一个特征就是对象要专注于提供特定的功能 换句话说 理想的对象不应该做各种不相干的事情 把诸如日志(logging)和计数(counting)等类似的功能封装为一个单独的对象 而让服务提供者对象仅提供它自己的特定功能 也就是说 只允许服务提供者对象执行定义良好 特定的任务

     计数代理被设计成可以被客户访问的与服务提供者具有相同接口的对象 客户对象不是直接访问服务提供者 而是调用计数代理对象上的方法 计数代理执行必要的纪录日志(logging)和计数(counting)功能后 再把方法调用传递给服务提供著对象 如图

  

  Figure : Generic Class Association When the Counting Proxy Pattern Is Applied

  下面的例子说明了如何在应用程序中利用计数代理

  例子

  让我们设计一个Order类 类层次如图 OrderIF接口声明了getAllOrders读取数据库中所有订单的简单方法

  

     Figure : Order Class Hierarchypublic interface OrderIF   public Vector getAllOrders();   

  作为getAllOrders方法实现的一部分 Order类实用了FileUtil工具类从order txt文件中读取订单项

   public class Order implements OrderIF   public Vector getAllOrders()   FileUtil fileUtil = new FileUtil();   Vector v = fileUtil fileToVector( orders txt );   return v;      

     让我们假定在调用getAllOrders()时 需要把取数据文件所花费的时间和记录条数要记录的log日志文件中

  这个附加的功能可以设计一个单独的OrderProxy类来实现 它与真实对象Order一样实现OrderIF接口 这样保证了OrderProxy对象提供给客户与真实对象Order一样的接口 如图

  

     Figure : Order Class Hierarchy with the Counting Proxypublic class OrderProxy implements OrderIF   private int counter = ;   public Vector getAllOrders()   Order order = new Order();   counter++;   long t = System currentTimeMillis ();   Vector v = order getAllOrders();   long t = System currentTimeMillis();   long timeDiff = t ? t ;   String msg = Iteration= + counter + ::Time= + timeDiff + ms ;   //log the message   FileUtil fileUtil = new FileUtil();   fileUtil writeToFile( log txt msg true true);   return v;      

  客户对象MainApp就想调用真实对象Order一样调用OrderProxy对象上的getAllOrders()方法 OrderProxy对象传递这个调用给真实对象Order 计算读取所有订单所花费的时间并使用FileUtil帮助类将其纪录的log日志文件中 在这个过程中 OrderProxy扮演者计数代理的角色

  

  public class MainApp   public static void main(String[] args)   OrderIF order = new OrderProxy();   Vector v = order getAllOrders();   v = order getAllOrders();   v = order getAllOrders();   v = order getAllOrders();      

cha138/Article/program/Java/gj/201311/27330

相关参考

知识大全 精解Java中代理模式的实现

精解Java中代理模式的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  简介摘要代理模式是G

知识大全 Java程序性能优化-代理模式(7)

Java程序性能优化-代理模式(7)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(1)

Java程序性能优化-代理模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(2)

Java程序性能优化-代理模式(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(3)

Java程序性能优化-代理模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(4)

Java程序性能优化-代理模式(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(5)

Java程序性能优化-代理模式(5)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(6)

Java程序性能优化-代理模式(6)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-业务代理模式(2)[1]

Java程序性能优化-业务代理模式(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-业务代理模式(1)[1]

Java程序性能优化-业务代理模式(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &