/**
* 模板办法模式
*
* 实现算法时,整体进程很固定,只有部份易转变
* 则可以将固定的部份提取到父类中实现,由子类实现易变的部份
*
* 根本办法:
* 1、抽象办法:父类声明,由子类具体实现
* 2、具体办法:父类实现,子类可以依据情形进行笼罩或直接继承
* 3、钩子办法:子类重写的父类办法
*
* 长处:
* 1、简化了子类的代码,便利保护
* 2、如有特别情形也可重写父类多个办法,具有必定扩大性
*
* 场景:
* JDBCTemplate、HibernateTemplate
* Junit单元测试、servlet中doGet/doPost
*/
public class TemplateMethodDemo01 {
public static void main(String[] args) {
ATMTemplateMethod atm1 = new ATMTemplateMethod(){
@Override
public void transact() {
System.out.println("取钱");
}
};
ATMTemplateMethod atm2 = new ATMTemplateMethod(){
@Override
public void transact() {
System.out.println("转账");
}
};
ATMTemplateMethod atm3 = new ATMTemplateMethod(){
@Override
public void transact() {
System.out.println("查询余额");
}
};
ATMTemplateMethod atm4 = new ATMTemplateMethod(){
@Override
public void insertBankCard() {}
@Override
public void enterPassword() {}
@Override
public void transact() {
System.out.println("无卡存款");
}
@Override
public void removeTheBankCard() {}
};
System.out.println("[路人甲]:");
atm1.process();
System.out.println("[路人乙]:");
atm2.process();
System.out.println("[路人丙]:");
atm3.process();
System.out.println("[路人丁]:");
atm4.process();
}
}
/**
* ATM机模板办法
*/
abstract class ATMTemplateMethod{
public void insertBankCard(){
System.out.println("******插入银行卡******");
}
public void enterPassword(){
System.out.println("******输 入 密 码******");
}
public abstract void transact();
public void removeTheBankCard(){
System.out.println("******取出银行卡******");
}
public final void process(){
this.insertBankCard();
this.enterPassword();
this.transact();
this.removeTheBankCard();
}
}/**
* 模板办法模式
*
* 实现算法时,整体进程很固定,只有部份易转变
* 则