优点:
- 封装不变部分,扩展可变优点
- 提取公共部份代码,便于维护
- 行为由父类控制,子类实现
缺点:
- 子类执行结果影响了父类的结果
应用场景
- 多个子类有公有的方法,并且逻辑基本相同时
- 重要,复杂的算法,可以放到模板,周边相关的细节交给子类
- 重构时,把相同的的模板提出到父类中,然后通过钩子函数约束其行为
/**
* 模板
*
* @author Administrator
*
*/
public abstract class HumanMode {
// 起床
protected abstract void getUp();
// 早饭
protected abstract void breakFast();
// 工作
protected abstract void work();
// 睡觉
protected abstract void sleep();
/**
* 一天的
*/
public final void lifeDay() {
getUp();
breakFast();
work();
sleep();
}
// 是否休假一天(钩子方法)
protected boolean isWork(){
return true;
}
}
/**
* 模板
*
* @author Administrator
*
*/
public class HumanModeIm extends HumanMode {
@Override
protected void getUp() {
// TODO Auto-generated method stub
System.out.println("小明--六点起床");
}
@Override
protected void breakFast() {
// TODO Auto-generated method stub
System.out.println("小明--早饭");
}
@Override
protected void work() {
// TODO Auto-generated method stub
System.out.println("小明--工作");
}
@Override
protected void sleep() {
// TODO Auto-generated method stub
System.out.println("小明--睡觉");
}
}
HumanMode human = new HumanModeIm();
human.lifeDay();