策略模式

来源:互联网 发布:华讯软件 编辑:程序博客网 时间:2024/05/23 18:17
public class ProcessFiles {  public interface Strategy {    void process(File file);  }  private Strategy strategy;  private String ext;  public ProcessFiles(Strategy strategy, String ext) {    this.strategy = strategy;    this.ext = ext;  }  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 {            // Allow user to leave off extension:            if(!arg.endsWith("." + ext))              arg += "." + ext;            strategy.process(              new File(arg).getCanonicalFile());          }        }    } catch(IOException e) {      throw new RuntimeException(e);    }  }  public void  processDirectoryTree(File root) throws IOException {    for(File file : Directory.walk(        root.getAbsolutePath(), ".*\\." + ext))      strategy.process(file.getCanonicalFile());  } }

注意策略模式和函数对象之间的关系,方法中的一个参数是函数对象,在方法中的策略使用了此函数对象中的函数,例如比较器comparator

public int sort(int[]a, comparator) {  ...;comparator.compare(a,b); }



原创粉丝点击