首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

实践中的设计方式运用

2012-08-31 
实践中的设计模式运用在项目中用到全文检索,大家知道全文检索是对索引的检索,由于用全文检索搜索出来的东

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

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

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;}


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

下面是我运用一些设计模式之后的
首先是定义一个接口


然后是接口的实现






最后是方法的出口


你看出运用设计模式的好处了吗? 1 楼 hquxiezk 2011-03-24   装饰模式。。。 2 楼 skyuck 2011-03-24   hquxiezk 写道装饰模式。。。
不只是运用了装饰者吧

热点排行