Java面向物件模板方法(溫習final、abstract)
阿新 • • 發佈:2018-11-03
/*
* 當代碼完成優化後,就可以解決這類問題
* 這種方式就是模板方法:
* 在定義功能時,功能一部分是確定的,但有一部分是不確定的,而確定的部分在使用不確定的部分,
* 那麼這時就將不確定的部分暴露出去.由該類的子類去完成.
*/
1.封裝前的程式碼(發現重複程式碼,//--//部分)
//建立一個記錄程式碼執行時間的物件 class getTime { public void getTime() { //記錄開始時間 long start = System.currentTimeMillis(); for(int x=0;x<1000;x++) { System.out.print(x); } //記錄結束時間 long end = System.currentTimeMillis(); System.out.println("毫秒"+(end-start)); } } //-------------------------未加入封裝思想時下面程式碼和上面程式碼存在重複--------------------------- //再寫一個記錄另一種時間的程式碼 class subTime extends getTime { public void getTime() { //記錄開始時間 long start = System.currentTimeMillis(); for(int x=0;x<4000;x++) { System.out.println(x); } //記錄結束時間 long end = System.currentTimeMillis(); System.out.println("毫秒"+(end-start)); } } //---------------------------------------------------------------------------------- public class Test { public static void main(String[] args) { // getTime gt = new getTime(); subTime gt = new subTime(); gt.getTime(); } }
2.封裝後的程式碼(將重複程式碼獨立出來,//**//部分)
繼承,重寫時就只需要寫獨立出來的程式碼了(//--//部分包圍的程式碼,對比1中的程式碼即可)
//建立一個記錄程式碼執行時間的物件 class getTime { public void getTime() { //記錄開始時間 long start = System.currentTimeMillis(); //********************** runCode();//子類複寫後走的子類的方法 //********************** //記錄結束時間 long end = System.currentTimeMillis(); System.out.println("毫秒"+(end-start)); } //*****************************將重複的程式碼獨立出來******************************** public void runCode() { for(int x=0;x<1000;x++) { System.out.print(x); } } //*************************************************************************** } //-------------------------未加入封裝思想時下面程式碼和上面程式碼存在重複--------------------------- //再寫一個記錄另一種時間的程式碼 class subTime extends getTime { public void runCode() { for(int x=0;x<1000;x++) { System.out.print(x); } } } //---------------------------------------------------------------------------------- public class Test { public static void main(String[] args) { // getTime gt = new getTime(); subTime gt = new subTime();//實力化子類物件 gt.getTime();//在子類物件中呼叫父類getTime方法 } }
3.進一步抽象出一個類
/* * 當代碼完成優化後,就可以解決這類問題 * 這種方式就是模板方法: * 在定義功能時,功能一部分是確定的,但有一部分是不確定的,而確定的部分在使用不確定的部分, * 那麼這時就將不確定的部分暴露出去.由該類的子類去完成. */ //建立一個記錄程式碼執行時間的物件 abstract class getTime { public final void getTime()//通過final禁止複寫 { //記錄開始時間 long start = System.currentTimeMillis(); //********************** runCode();//子類複寫後走的子類的方法,屬於不確定功能 //********************** //記錄結束時間 long end = System.currentTimeMillis(); System.out.println("毫秒"+(end-start)); } //*****************************將重複的程式碼獨立出來******************************** public abstract void runCode();//這段程式碼留給子類去確定,做法交給父類,呼叫交給子類.可以將不確定功能暴露出去 //*************************************************************************** } //-------------------------未加入封裝思想時下面程式碼和上面程式碼存在重複--------------------------- //再寫一個記錄另一種時間的程式碼 class subTime extends getTime { public void runCode() { for(int x=0;x<1000;x++) { System.out.print(x); } } } //---------------------------------------------------------------------------------- public class Test { public static void main(String[] args) { // getTime gt = new getTime(); subTime gt = new subTime();//實力化子類物件 gt.getTime();//在子類物件中呼叫父類getTime方法 } }