抽象类,不变的代码写了,要变化的部分留给子类去实现:
package 行为型_模板方法模式;
//模板设计模式的意思是把不变定位部分写出来,变化的部分留给子类去实现
public abstract class GetTime {
public long getTime() throws Exception{
long start = System.currentTimeMillis();//开始时间
/*
//for循环
for(int i=0;i<10000;i++){
System.out.println(i);
}*/
/*
//视频 /设计模式/src/avi/a.avi
BufferedInputStream input= new BufferedInputStream(new FileInputStream("/设计模式/src/avi/a.avi"));
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("b.avi"));
byte[] b = new byte[1024];
int len=0;
while((len=input.read(b))!=-1){
output.write(b,0,len);
}
output.close();
input.close();
//再給我测试一个代码:集合操作的多线程操作,常用API,那么你也还要写代码吗,麻烦!!!!!!!!!!!!!!!!
*/
code();//子类去写
long end = System.currentTimeMillis();//结束时间
return end-start;
}
//写一个抽象的方法,子类自己去实现方法的具体操作(内容)
public abstract void code();//留给子类实现
}
For循环求运行时间类:
package 行为型_模板方法模式;
public class ForGetTime extends GetTime{
@Override
public void code() {
for(int i=0;i<10000;i++){
System.out.println(i);
}
}
}
IO流读取视频,求其运行时间的类:
package 行为型_模板方法模式;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class IOGetTime extends GetTime{
@Override
public void code(){
try {
BufferedInputStream input = new BufferedInputStream(new FileInputStream("avi/a.avi"));
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("b.avi"));
byte[] b = new byte[1024];
int len=0;
while((len=input.read(b))!=-1){
output.write(b,0,len);
}
output.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试类:
package 行为型_模板方法模式;
public class GetTimeMain {
public static void main(String[] args) throws Exception {
// GetTime gTime = new GetTime();
// System.out.println(gTime.getTime()+"毫秒");
//面向抽象编程
GetTime gt = new ForGetTime();
System.out.println(gt.getTime()+"毫秒");
//重新赋值为读取的是IO流.avi
gt = new IOGetTime();
System.out.println(gt.getTime()+"毫秒");
}
}