请教 bang ,关于 jive 过滤器中的 clone问题

10-07-22 beyondyuefei
在 bang 大哥过去写的 jive 论坛系统完整分析一文中,介绍过滤器和装饰模式的时候,有一段话:

HTMLFilter 的 clone 方法实际就是在当前 HTMLFilter 实例中再生成一个同样的实例。这样在处理多个并发请求时,不用通过同一个过滤器实例进行处理,提高了性能。但是 HTMLFilter 的 clone 方法是采取 new 方法来实现,不如直接使用 Object 的 native 方法速度快。

因为在 DbFilterManager 中是根据配置使用类反射机制动态分别生成包括 HTMLFilter 在内的过滤器实例。但是每种过滤器实例只有一个,为了使得大量用户不必争夺一个过滤器实例来实现过滤,就采取了克隆方式,这种实战手法可以借鉴在自己的应用系统中。

代码如下:

public ForumMessageFilter clone(ForumMessage message){

HTMLFilter filter = new HTMLFilter();

filter.message = message;

return filter;

}

对于您的这句 “为了使得大量用户不必争夺一个过滤器实例来实现过滤,就采取了克隆方式” ,我百思不得其解,还望详细解答下,谢谢

banq
2010-07-23 17:20
实际也是原型模式,比如对ddd值对象也可以采取原型方式,或共享方式。

beyondyuefei
2010-07-23 17:28
不懂,还请详细说明,什么是避免的多个请求竞争开对象实例 ?

banq
2010-07-23 18:02
原型就是将孙悟空,将自己克隆一下,一模一样,这样,客户端操作克隆对象和原始对象就没有关系。

猜你喜欢