模板模式:
就是预先在一个抽象类(父类)中定义顶层的骨架算法,算法中的细节延迟到子类中实现。
类图:
抽象模板结构:
模板方法:一般是具体的实现方法,它是一个包含了很多基本操作的总算法或总行为。
基本方法:分为3类,①抽象方法,在抽象类中声明,由子类去实现。
②具体方法:在抽象类中声明并实现,子类并不实现或重写,方法前通常用 final 修饰。
③钩子方法:在抽象类中声明并实现,而子类可以扩展(重写),通常抽象类中定义为空实现,作为默认实现。
以上3种方法,可根据需要使用。
代码:
抽象类:
package com.zzb.Test201406;
public abstract class AbstractTemplate {
/**
* 模板方法
*/
public void execute(){
wakeUp();
work();
sleep();
}
/**
* 具体方法,一般是针对具体固定的业务,所以方法是不可变的。
*/
private final void wakeUp(){
System.out.println("起床、。。");
}
/**
* 抽象方法,一般是总算法中必不可缺的一步,但是灵活性很大,不同业务有不同的实现。
*/
protected abstract void work();
/**
* 钩子方法,一般是有默认的实现,业务不一定要自定义实现。
*/
protected void sleep(){};
}
实现类:
package com.zzb.Test201406;
public class ConcreteTemplate extends AbstractTemplate{
@Override
protected void sleep() {
System.out.println("work overtime...");
}
/**
* work
*/
@Override
protected void work() {
System.out.println("work hard....");
}
}
测试类:
package com.zzb.Test201406;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
new ConcreteTemplate().execute();
}
}