1)File中list()方法的策略设计模式
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[v.size()]));
}
设计需求:在此文件下获取我想要的名称列表,想要的规则肯定是变化的,所以这个就是想要的策略,把策略当参数传递,比如我想要文件名大于3的文件名称
public static void main(String[] args) {
File file = new File("d:\\");
String[] names = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.length() < 10;
}
});
for (String name :
names) {
System.out.println(name);
}
}
感悟:file相当于拥有一个属性,就是获取文件列表,然后要对这个文件列表进行处理,会有不同的方式,然后选择填入策略进行处理
比如,你有一个服务,能够获取到一个类,或者一个类的列表,你需要对其进行排序,或者复制,获取从列表中获取一个值,则都可以用策略
重要的一点是,把变化的抽象出方法,如果是自己的方法,那就可以当做成模板模式,如果此变化抽象出方法是其他类的方法,不管是放入方法的参数,还是放入到类的属性,都可以是策略模式