1、抽取一个抽象模板类,同时定义模板方法 对于模板方法的实现,在子类中去实现。
public abstract class GetTimeTemplate {
// 固定流程方法
public long getTime() {
// 获取起始时间
long t1 = System.currentTimeMillis();
// 模板方法
code();
// 获取结束时间
long t2 = System.currentTimeMillis();
return t2 - t1;
}
// 钩子方法
public abstract void code();
}
2、定义两个实现类,实现抽象类中的模板方法
public class CopyFileDemo extends GetTimeTemplate {
@Override
public void code() {
//复制文件
try {
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("张三.jpg"));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("mn.jpg"));
byte[] bs = new byte[256];
int len = 0;
while((len = inputStream.read(bs)) != -1){
outputStream.write(bs, 0, len);
outputStream.flush();
}
//释放资源
inputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class ForDemo extends GetTimeTemplate{
@Override
public void code() {
//输出for循环
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
}
}
测试类:
public class DesignPatternDemo {
public static void main(String[] args) {
GetTimeTemplate time = new ForDemo();
System.out.println("耗时 "+time.getTime()+" 毫秒");
GetTimeTemplate time2 = new CopyFileDemo();
System.out.println("耗时 "+time2.getTime()+" 毫秒");
}
}
主要解决的问题:一些通用的方法,在每个子类中都重写了一遍。