请教prototype模式!

07-07-09 zhiyao
在banq的java实用系统开发指南里的HTMLFilter代码里

public class HTMLFilter extends ForumMessageFilter{

public ForumMessageFilter clone(ForumMessage message){

HTMLFilter filter=new HTMLFilter();

filter message=message;

return filter;

}

public boolean isCheable(){

return true;

}

......

HTMLFIlter 的clone方法实际就是在当前HTMLFilter实例中再生成一个同样的实例。这样在处理多个并发请求时,不用通过同一个过滤器实例进行处理,提高了性能。。。。

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

这是原文。

这句话我不是很理解,还有就是原型模式的clone我也不是很理解,希望有朋友帮我!

         

xiaoxiaolang529
2007-07-09 15:58
請banq大哥多多指點指點設計模式!!!

banq
2007-07-10 15:29
这里关于HtmlFilter的解释是从性能角度来看,这有失偏颇,HtmlFilter是一个单例,而HtmlFilter中包含message这个状态,这个状态值对于每个帖子是不一样的,所以,如果只用一个HtmlFilter,同时有多个帖子显示调用HtmlFilter时,会共同读写同一个htmlFilter的同一个message状态,那就乱了。

关于克隆是原型的一种实现,实现原型不一定使用克隆。Java克隆IBM有一篇文章写得很深刻,可查查看看。

猜你喜欢