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