zoukankan      html  css  js  c++  java
  • 过滤器模式

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

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

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

    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
    <String> ReadDir(String dirPath,FilterInterface[] filters){ File file = new File(dirPath); List<String> reslist = new ArrayList<String>(); 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<String> getDirContent(path){
            FilterInterface[] business1Filter = {new Business1Filter()};//可以定义多个过滤器
            return DirManger.ReadDir(path,business1Filter);
        }
    }
  • 相关阅读:
    luoguP1080 国王游戏 题解(NOIP2012)(贪心+高精)
    luoguP1079 Vigenère 密码 题解(NOIP2012)
    luoguP2184 贪婪大陆 题解(树状数组)
    luoguP2680 运输计划 题解(二分答案+树上差分)
    树链剖分总结
    树上差分总结
    luoguP3258 [JLOI2014]松鼠的新家 题解(树上差分)
    简单差分(保证你一看就懂)
    luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)
    luoguP1541 乌龟棋 题解(NOIP2010)
  • 原文地址:https://www.cnblogs.com/mingziday/p/4604925.html
Copyright © 2011-2022 走看看