拆解Cluene系列(6)——Analyzer的职责链模式
2016-08-12 10:14
417 查看
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
关于职责链模式,可以参考博文:职责链模式
其UML类图如下:
Clucene中StandardAnalyzer用到了职责链模式,相关代码如下:
关于职责链模式,可以参考博文:职责链模式
其UML类图如下:
Clucene中StandardAnalyzer用到了职责链模式,相关代码如下:
//这是handler class StandardTokenizer: public TokenStream { public: bool StandardTokenizer::next(Token* t) { .... return true; } } class StandardFilter:public TokenStream { bool StandardFilter::next(Token* t) { if (!input->next(t)) return false; //将类似于She's 的token,变成She //将类似与An.ter 变成Anter return true; } } class LowerCaseFilter: public TokenStream { public: LowerCaseFilter(TokenStream* in, bool deleteTokenStream):TokenFilter(in,deleteTokenStream) {} ~LowerCaseFilter(){} bool next(Token* token) { if (!input->next(t)) return false; tolower( t->_termText );//转换成小写 return true; } }; class StopFilter: public TokenStream { public: StopFilter(TokenStream* in, bool deleteTokenStream, TCHAR* stopWords[]); ~StopFilter(){} bool next(Token* token) { if (!input->next(t)) return false; if (table->find(token->_termText)==table->end()) //如果不是停用词,返回true return true; return false; } }; //这是客户端 class StandardAnalyzer : public Analyzer { public: TokenStream* StandardAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { TokenStream* ret = _CLNEW StandardTokenizer(reader); ret = _CLNEW StandardFilter(ret,true); ret = _CLNEW LowerCaseFilter(ret,true); ret = _CLNEW StopFilter(ret,true, &stopSet); return ret; } };可以看到,这是一个倒职责链模式,也是一个不纯的职责链,即每一个对象处理时,先交给前驱处理,前驱处理完毕后自己再处理。input对象不是他的后继处理对象,而是前驱处理对象。其处理顺序为:
相关文章推荐
- UML类图中的六种关系
- java Lucene 中自定义排序的实现
- 比较常用UML类图几种关系的小结
- 使用Java的Lucene搜索工具对检索结果进行分组和分页
- 关于lucene搜索时排序的问题
- Lucene highlighter高亮显示
- IKAnalyzer分词技术
- Highlighter与BooleanQuery查询
- 从零开始使用Hubbledotnet进行全文搜索-前言
- lucene搜索报错排查记录
- UML类图几种关系的总结
- Class Model(类模型)
- 深入浅出UML类图(一)
- 打造自己的搜索引擎
- 一个在线的画UML图的网站
- Lucene整合"庖丁解牛"中文分词包
- JAVA lucene全文检索工具包的理解与使用 分享
- visio画UML用例图没有include关系的解决方法
- 认识UML类图元素
- Lucene:基于Java的全文检索引擎简介