版权声明:本文为博主(http://www.leologic.top/)原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_17107171/article/details/81277281
/*
* 当代码完成优化后,就可以解决这类问题
* 这种方式就是模板方法:
* 在定义功能时,功能一部分是确定的,但有一部分是不确定的,而确定的部分在使用不确定的部分,
* 那么这时就将不确定的部分暴露出去.由该类的子类去完成.
*/
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方法
}
}