作用
- 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
何时使用
优点
- 封装不变部分,扩展可变部分。
- 提取公共代码,便于维护。
- 行为由父类控制,子类实现。
实例
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/25 14:27
* @Version:
* @Acton:
*/
public abstract class BankTemplate {
public void takeNumber(){
System.out.println("取号排队");
}
public abstract void transact(); //办理具体事情,钩子方法
public void evaluate(){
System.out.println("反馈评分");
}
public final void proces(){ //模板方法
this.takeNumber();
this.transact();
this.evaluate();
}
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/25 14:45
* @Version:
* @Acton:
*/
public class DradMoney extends BankTemplate{
@Override
public void transact() {
System.out.println("取款");
}
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/25 14:44
* @Version:
* @Acton:
*/
public class TestTemplateDemo {
public static void main(String[] args){
test1();
test2();
test3();
}
/* 使用常规方法 */
public static void test1(){
BankTemplate drad = new DradMoney();
drad.proces();
}
/* 使用内部方法 */
public static void test2(){
BankTemplate template = new BankTemplate() {
@Override
public void transact() {
System.out.println("我要存钱");
}
};
template.proces();
}
public static void test3(){
BankTemplate template = new BankTemplate() {
@Override
public void transact() {
System.out.println("我要办信用卡");
}
};
template.proces();
}
}
关系结构图

还没有评论,来说两句吧...