抽象类,不变的代码写了,要变化的部分留给子类去实现:
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()+"毫秒"); } }
时间: 2024-12-05 10:54:20