博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
过滤器模式
阅读量:4950 次
发布时间:2019-06-11

本文共 1415 字,大约阅读时间需要 4 分钟。

最近开发的一个功能,要求读取一个目录,对目录下的文件名进行过滤。

考虑到读取目录是一个独立的与文件操作相关的公共功能,与业务没有关系,而文件名的过滤条件是由不同的业务决定的,所以二者要做到逻辑上的隔离。因此想到针对不同的业务涉及不同的过滤器,文件目录读取工具类能够接受过滤器作为参数,而不必关心过滤器到底要过滤些啥东西。

废话不多说,翠花,上代码:

1、定义过滤器接口

public interface FilterInterface{    boolean accept(String name);}

2、定义各式各样的过滤器

public class Business1Filter implments FilterInterface {    //业务1的过滤逻辑    boolean accept(String name)    {        ......;    }}public class Business2Filter implments FilterInterface {    //业务2的过滤逻辑    boolean accept(String name)    {        ......;    }}

3、在公共的文件操作类中,在对应的方法上添加过滤器参数

public class DirManger{
   /*目录读取方法*/ List
ReadDir(String dirPath,FilterInterface[] filters){ File file = new File(dirPath); List
reslist = new ArrayList
(); String[] filelist = file.list(); for(String str : filelist) {//遍历文件 for(FilterInterface filter : filters){//对文件名进行过滤操作 if(filter.accept(str)){//返回通过过滤器的文件名 reslist.add(str); } } } return reslist }}

4、具体的业务类中,就可以采用各式各样的过滤器组成数组,调用ReadDir方法,返回符合条件的文件名

public class Business1{    public List
getDirContent(path){ FilterInterface[] business1Filter = {
new Business1Filter()};//可以定义多个过滤器 return DirManger.ReadDir(path,business1Filter); }}

转载于:https://www.cnblogs.com/mingziday/p/4604925.html

你可能感兴趣的文章
[android] 网络断开的监听
查看>>
156.Binary Tree Upside Down
查看>>
MongoDB在windows下安装配置
查看>>
Upselling promotion stored procedure
查看>>
mysql编码配置
查看>>
KVM地址翻译流程及EPT页表的建立过程
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码...
查看>>
程序员如何提高影响力:手把手教你塑造个人品牌
查看>>
身份证校验原理和PHP实现
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
计算机
查看>>
Ext JS学习第十三天 Ext基础之 Ext.Element
查看>>
python--迭代器与生成器
查看>>
SQL之case when then用法详解
查看>>
STL 排序函数
查看>>
Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络...
查看>>
Setting up a Passive FTP Server in Windows Azure VM(ReplyCode: 227, Entering Passive Mode )
查看>>