設計模式-模版設計模式概述和使用-抽象類

ZHOU_VIP發表於2017-06-11

模版設計模式概述

模版方法模式就是定義一個演算法的骨架,而將具體的演算法延遲到子類中來實現

優點

使用模版方法模式,在定義演算法骨架的同時,可以很靈活的實現具體的演算法,滿足使用者靈活多變的需求

缺點

如果演算法骨架有修改的話,則需要修改抽象類

package cn.itcast_01;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public abstract class GetTime {
	// 需求:請給我計算出一段程式碼的執行時間
	public long getTime() {
		long start = System.currentTimeMillis();
		// for迴圈
		// for (int x = 0; x < 10000; x++) {
		// System.out.println(x);
		// }

		// 複製視訊
		// try {
		// BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.avi"));
		// BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.avi"));
		// byte[] bys = new byte[1024];
		// int len = 0;
		// while ((len = bis.read(bys)) != -1) {
		// bos.write(bys, 0, len);
		// }
		// bos.close();
		// bis.close();
		// } catch (IOException e) {
		// e.printStackTrace();
		// }

		// 再給我測試一個程式碼:集合操作的,多執行緒操作,常用API操作的等等...是變化的
		code();

		long end = System.currentTimeMillis();

		return end - start;
	}

	public abstract void code();
}
package cn.itcast_01;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IODemo extends GetTime{

	@Override
	public void code() {
		try {
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream("a.avi"));
			BufferedOutputStream bos = new BufferedOutputStream(
					new FileOutputStream("b.avi"));
			byte[] bys = new byte[1024];
			int len = 0;
			while ((len = bis.read(bys)) != -1) {
				bos.write(bys, 0, len);
			}
			bos.close();
			bis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}
package cn.itcast_01;

public class ForDemo extends GetTime {

	@Override
	public void code() {
		for (int x = 0; x < 100000; x++) {
			System.out.println(x);
		}
	}

}
package cn.itcast_01;

public class GetTimeDemo {
	public static void main(String[] args) {
		// GetTime gt = new GetTime();
		// System.out.println(gt.getTime() + "毫秒");

		GetTime gt = new ForDemo();
		System.out.println(gt.getTime() + "毫秒");

		gt = new IODemo();
		System.out.println(gt.getTime() + "毫秒");
	}
}

相關文章