zoukankan      html  css  js  c++  java
  • 策略模式(回调函数)

    /**
     * 
     */
    package com.zachary.io.util;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * @author Zachary.Zheng
     * @version 1.0
     * @date 2019年11月9日
     */
    public class ProcessFiles {
    	/**
    	 * 定义回调函数接口
    	 * 在调用时实现
    	 * @author Zachary.Zheng
    	 * @version 1.0
    	 * @date 2019年11月9日
    	 */
    	public interface Strategy{
    		void process(File file);
    	}
    	private Strategy strategy;
    	private String ext;
    	public ProcessFiles(Strategy strategy, String ext) {
    		super();
    		this.strategy = strategy;
    		this.ext = ext;
    	}
    	public ProcessFiles() {
    		super();
    	}
    
    	public void start(String [] args) {
    		try {
    			if(args.length == 0) {
    				processDirectoryTree(new File("."));
    			} else {
    				for (String arg : args) {
    					File fileArg = new File(arg);
    					if(fileArg.isDirectory()) {
    						processDirectoryTree(fileArg);
    					} else {
    						if(!arg.endsWith("." + ext)) {
    							arg += "." + ext;
    						}
    						// 执行回调函数
    						strategy.process(new File(arg).getCanonicalFile());
    					}
    				}
    			}
    		} catch (Exception e) {
    			// TODO: handle exception
    		}
    	}
    	public void processDirectoryTree(File root) throws IOException {
    		for(File file: Directory.walk(root.getAbsolutePath(), ".*\."+ext)) {
    			// 执行回调函数
    			strategy.process(file.getCanonicalFile());
    		}
    	}
    	public static void main(String[] args) {
    		new ProcessFiles(new ProcessFiles.Strategy() {
    			// 回调函数
    			public void process(File file) {
    				System.out.println(file);
    			}
    		}, "java").start(args);;
    	}
    }
    /* Output: (sample)
    E:\javaBaseLearn\IOStreamworkSpace\java-io-stream\src\com\zachary\io\util\Directory.java
    E:\javaBaseLearn\IOStream\workSpace\java-io-stream\src\com\zachary\io\util\DirList.java
    E:\javaBaseLearn\IOStream\workSpace\java-io-stream\src\com\zachary\io\util\DirList2.java
    E:\javaBaseLearn\IOStream\workSpace\java-io-stream\src\com\zachary\io\util\DirList3.java
    E:\javaBaseLearn\IOStream\workSpace\java-io-stream\src\com\zachary\io\util\PPrint.java
    E:\javaBaseLearn\IOStream\workSpace\java-io-stream\src\com\zachary\io\util\ProcessFiles.java
    E:\javaBaseLearn\IOStream\workSpace\java-io-stream\src\com\zachary\io\util\TreeInfo.java 
    *///:~
    

      

  • 相关阅读:
    Qt ini文件
    Qt我的文档 桌面路径
    windows zlib库编译步骤
    环形缓冲区
    openssl生成随机数
    怎样安装Scrapy
    CentOS7怎样安装GoAccess1.3
    Docker创建数据卷容器
    Docker创建数据卷
    Docker创建容器
  • 原文地址:https://www.cnblogs.com/zhongli1/p/11828238.html
Copyright © 2011-2022 走看看