本系列博客汇总在这里:Java系列_汇总
目录
- 一、第一种角色:抽象模板
- 二、第二种角色:具体模板需要继承抽象模板
一、第一种角色:抽象模板
- 定义三种方法:第一个抽象方法需要子类去实现;
- 子类必须实现第二个扩展方法,是一个空方法;
- 子类可以去复写也可以不复写第三个私有的最终方法;
- 不可复写的第四个模板方法,这个方法中定义了每一个方法的执行顺序和逻辑。
二、第二种角色:具体模板需要继承抽象模板
需要实现抽象模板中的抽象方法,可以扩展抽象模板中的扩展方法
示例(框架)
//抽象模板
abstract class AbstractTemplate
{
/**
*必须要实现的一个业务方法
*/
public abstract void abstractMethod();
/**
*定义一个可以重写也可以不重写的方法
*/
public void hookMethod()
{
}
/**
*必须不能被重写的方法
*/
public final void concrateMethod()
{
}
/**
*模板方法,供其他类来使用
*/
public void templateMethod()
{
hookMethod();
abstractMethod();
concrateMethod();
}
}//具体模板
class ContrateTemplate extends AbstractTemplate
{
/**
*实现具体的业务逻辑
*/
public void abstractMethod()
{
System.out.println("具体逻辑");
}
public void hookMethod()
{
System.out.println("方法重写");
}
}class Welcome
{
public static void main(String[] args)
{
}
}示例(实例)
//抽象模板
abstract class CalTimeAbsTemplate
{
/**
*必须要实现的一个业务方法
*/
public abstract void doJob();
/**
*定义一个可以重写也可以不重写的方法
*/
public void hookMethod()
{
System.out.println("程序开始执行");
}
/**
*必须不能被重写的方法
*/
public final long concrateMethod()
{
long currentTime = System.currentTimeMillis();
return currentTime;
}
/**
*模板方法,供其他类来使用
*/
public long templateMethod()
{
hookMethod();
//获得dojob执行前的时间
long startTime = concrateMethod();
doJob();
try
{
Thread.sleep(5);//休眠5ms
} catch (InterruptedException e)
{
System.out.println("出现错误");
e.printStackTrace();
}
//获得dojob执行后的时间
long endTime = concrateMethod();
return endTime - startTime;
}
}//具体模板
class ContrateTemplate extends CalTimeAbsTemplate
{
/**
*实现具体的业务逻辑
*/
public void abstractMethod()
{
System.out.println("具体逻辑");
}
public void doJob()
{
for(int i = 0; i <= 100; i++)
{
System.out.println("程序正在执行"+i+"%");
}
}
}class Welcome
{
public static void main(String[] args)
{
//创建具体模板对象
ContrateTemplate ct = new ContrateTemplate();
//获得具体模板中的dojob的运行时间
long doTime = ct.templateMethod();
System.out.println("程序运行时间是:"+doTime+"毫秒");
}
}
如有错误,欢迎指正!