码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式(回调函数)

时间:2019-11-09 23:23:14      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:java   ase   tput   start   star   ==   实现   策略模式   list   

/**
 * 
 */
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\\IOStream\workSpace\\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 
*///:~

  

策略模式(回调函数)

标签:java   ase   tput   start   star   ==   实现   策略模式   list   

原文地址:https://www.cnblogs.com/zhongli1/p/11828238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!