继上篇策略模式,可以引出一个叫做适配器模式的设计模式
先看下面的代码,还是上篇策略模式的代码段
interface Process{
public void process(File file);
}
public class Test{
public static void walkDir(Process p,File file){
File[] files = file.listFiles();
for(File ff : files){
if(ff.isDirectory()){
walkDir(p,ff);
}
//这里就把遍历文件的代码与处理文件的代码分离开了
p.process(ff);
}
}
public static void main(String[] args){
Process p1 = new Process(){
public void process(File file){
System.out.println(ff.getAbsolutePath());
//p1 处理器,只是简单的输出文件的绝对路径;
}
};
Process p2 = new Process(){
public void process(File file){
private count = 0;
String path = file.getAbsolutePath();
int index = path.lastIndexOf("\\");
String str = path.substring(0,index);
file.renameTo(new File(str+ "/" + count));
count++;
//p2处理器,将遍历到的文件名字改成相关数字
}
};
//如果想用p2,只需要将下面的第一个参数改成p2,就可以了
walkDir(p1,new File("E:/abc"));
}
}
在给walkDir()传的第一个参数(p1、p2…),都我们自己定义的类
那如果是这个类不是我们自己定义的,而是发现的,比如系统内置的java.util.Date类呢,它并没有实现Process接口,也不可能实现这个接口
因为系统内置的类我们改不了,我们手里只有系统生成好的可怜的class文件
肿么办??现在我非要传个Date类进去,这个时候,适配器就可以解决这个问题
看下面的代码:
class DateAdapter implements Process{
private Date date;
public DateAdapter(Date date){
this.date = date;
}
public void process(File file){
System.out.println(file.getName() + ":" +date.getDate());
}
}
OK,现在做出了一个DateAdapter,把Date传进去,实现Process接口,所以现在处理过程中还可以用Date去处理,这就叫适配,这样一适配,任何类都可以去处理文件了
现在这样给walkDir()传参数:
walkDir(new DateAdapter(new Date()),new File("E:/abc"));
总结一下,如果一个类是你发现的,而发现的类自己又改不了,自定义的类才能改,这个时候去用发现的类去处理相关的过程,就用到了适配器模式
个人浅谈,有误地方,多多指教
版权声明:本文为博主原创文章,未经博主允许不得转载。