java代理模式:Java设计模式的计数代理模式来源: 发布时间:星期五, 2008年12月19日 浏览:2次 评论:0
计数代理模式在客户对象服务提供者对象上思路方法前后执行诸如日志(logging)和计数(counting)系列附加功能时很有用计数代理模式建议把这些附加功能封装在个单独对象这个对象就是指计数代理对象而不是把这些附加功能实现放到服务提供者内部良好对象设计个特征就是对象要专注于提供特定功能换句话说理想对象不应该做各种不相干事情把诸如日志(logging)和计数(counting)等类似功能封装为个单独对象而让服务提供者对象仅提供它自己特定功能也就是说只允许服务提供者对象执行定义良好、特定任务
计数代理被设计成可以被客户访问和服务提供者具有相同接口对象客户对象不是直接访问服务提供者而是计数代理对象上思路方法计数代理执行必要纪录日志(logging)和计数(counting)功能后再把思路方法传递给服务提供着对象如图1
Figure1: Generic Class Association When the Counting Proxy Pattern Is Applied
下面例子介绍说明了如何在应用中利用计数代理
例子:
让我们设计个Order类类层次如图2OrderIF接口声明了getAllOrders读取数据库中所有订单简单思路方法
Figure2: Order Class Hierarchy
public erface OrderIF {
public Vector getAllOrders;
}
作为getAllOrders思路方法实现部分Order类实用了FileUtil工具类从order.txt文件中读取订单项
public Order implements OrderIF {
public Vector getAllOrders {
FileUtil fileUtil = FileUtil;
Vector v = fileUtil.fileToVector("orders.txt");
v;
}
}
让我们假定在getAllOrders时需要把取数据文件所花费时间和记录条数要记录log日志文件中
这个附加功能可以设计个单独OrderProxy类来实现它和真实对象Order样实现OrderIF接口这样保证了OrderProxy对象提供给客户和真实对象Order样接口如图3
Figure3: Order Class Hierarchy with the Counting Proxy
public OrderProxy implements OrderIF {
private counter = 0;
public Vector getAllOrders {
Order order = Order;
counter;
long t1 = .currentTimeMillis ;
Vector v = order.getAllOrders;
long t2 = .currentTimeMillis;
long timeDf = t2 ? t1;
String msg = "Iteration=" + counter + "::Time=" + timeDf + "ms";
//log the message
FileUtil fileUtil = FileUtil;
fileUtil.writeToFile("log.txt”,msg, true, true);
v;
}
}
客户对象MainApp就想真实对象Order样OrderProxy对象上getAllOrders思路方法OrderProxy对象传递这个给真实对象Order,计算读取所有订单所花费时间并使用FileUtil帮助类将其纪录log日志文件中在这个过程中OrderProxy扮演者计数代理角色
public MainApp {
public void (String args) {
OrderIF order = OrderProxy;
Vector v = order.getAllOrders;
v = order.getAllOrders;
v = order.getAllOrders;
v = order.getAllOrders;
}
}
0
相关文章
读者评论
发表评论 |