实践中的设计模式运用

在项目中用到全文检索,大家知道全文检索是对索引的检索,由于用全文检索搜索出来的东西可能并不都是用户需要的,所以就增加了一个过滤功能,就是从全文检索搜索出来的结果集中排除不符合条件的(当然条件是多种多样的,也可能是多种组合的)。
在我们项目中条件是权限的限制,文件夹的限制,修改时间的限制以及这三种限制的各种组合。

首先看看我的一位同事的代码

private static List<String> getFilterId(Map<Integer, String> idMap,SearchBean bean ){
List<String> returnlist = new ArrayList<String>();
for(String id : idMap.values()){
File f = null;
try {
f = fileManager.get(File.class, id);
boolean file =StringUtils.isNotBlank(bean.getFileId());
boolean updateB = StringUtils.isNotBlank(bean.getUpdateBeginDate());
boolean updateE = StringUtils.isNotBlank(bean.getUpdateEndDate());
boolean popedom = cacheManager.hasPopedom(null, f, new String[] { CacheManager.ReadType_Popedom }, bean.getCurUser(), FileConstants.action_preview);
//只进行lucene全文检索
if(!file && !updateB && !updateE){
if (f != null && popedom) {
returnlist.add(id);
}
}
//lucene全文检索+文件夹限制
if(file && !updateB && !updateE){
boolean flag =false;
String direIds = searchInDire(bean.getFileId(),bean.getIsinclude());
flag = ArrayUtils.contains(direIds.split(","), f.getDirectory().getId());
if(flag && f != null && popedom){
returnlist.add(id);
}
}
//lucene+更新时间
if(!file && (updateB || updateE)){
if(updateB && updateE){
if(popedom && (DateUtil.compareDate(f.getUpdateTime(),DateUtil.convertStringToDate(bean.getUpdateBeginDate()))==1)&&(DateUtil.compareDate(DateUtil.convertStringToDate(bean.getUpdateEndDate()),f.getUpdateTime())==1) && f != null){
returnlist.add(id);
}
}else if(updateB && !updateE){
if(popedom && (DateUtil.compareDate(DateUtil.convertStringToDate(bean.getUpdateBeginDate()),f.getUpdateTime())==1) && f != null){
returnlist.add(id);
}
}else{
if(popedom && (DateUtil.compareDate(f.getUpdateTime(),DateUtil.convertStringToDate(bean.getUpdateBeginDate()))==1) && f != null){
returnlist.add(id);
}
}
}
//lucene+文件夹限制+更新时间
if(file && (updateB || updateE)){
boolean flag =false;
String direIds = searchInDire(bean.getFileId(),bean.getIsinclude());
flag = ArrayUtils.contains(direIds.split(","), f.getDirectory().getId());
if(file && updateB && updateE){
if(flag && popedom && f != null && (DateUtil.compareDate(f.getUpdateTime(),DateUtil.convertStringToDate(bean.getUpdateBeginDate()))==1)&&(DateUtil.compareDate(DateUtil.convertStringToDate(bean.getUpdateEndDate()),f.getUpdateTime())==1)){
returnlist.add(id);
}
}else if(file && updateB && !updateE){
if(flag && popedom && f != null && (DateUtil.compareDate(DateUtil.convertStringToDate(bean.getUpdateBeginDate()),f.getUpdateTime())==1)){
returnlist.add(id);
}
}else{
if(flag && popedom && f != null && (DateUtil.compareDate(f.getUpdateTime(),DateUtil.convertStringToDate(bean.getUpdateBeginDate()))==1)){
returnlist.add(id);
}
}
}
} catch (Exception e) {
}
}
return returnlist;
}


这段代码很长,我排版就排了很长时间,还排的不是很好看。
这个方法的作用是根据条件找出不符合条件的数据。
大家可以看到每种条件及条件的组合都要进行判断过滤,如果再增加一个条件,那么这个方法就会变的更大,判断更多。

下面是我运用一些设计模式之后的
首先是定义一个接口
[img]http://dl.iteye.com/upload/attachment/445554/9e19595d-a1df-3916-9e81-3c8432e592aa.jpg[/img]

然后是接口的实现
[img]http://dl.iteye.com/upload/attachment/445556/f4fba109-69b2-3c34-b266-77a142375f2b.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/445558/8f761ad1-05b1-3dd0-99f0-b8615e7ba13b.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/445560/95828753-02da-30f3-8f25-57a10eea055a.jpg[/img]

最后是方法的出口
[img]http://dl.iteye.com/upload/attachment/445562/ffe20011-7f87-3bc5-8058-e8fa8f888f8c.jpg[/img]

你看出运用设计模式的好处了吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值