标签:
模板方法模式:模板方法模式是编程中经常用到的模式,它定义了一个操 作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在 不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。
核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不 能确定。因此采用工厂方法模式将这个节点的代码实现转移给子类完成 即:处理步骤父类中定义好,具体实现延迟到子类中定义。 模板方法模式的使用场景:实现一个算法时,整体步骤很固定。但是某些部分易变。易变部分可以抽象出来,供子类实现。
开发中的场景: 数据库访问的封装。 Junit测试 servlet中doget dopost方法调用,HeadFirst中还提到Java CompareTo()方法也相识一个钩子函数。
public abstract class BankTemplate {
public void takeNumber() {
System.out.println("领取排队号");
}
//办理具体的业务 这里不能确定这个步骤 不提供实现
public abstract void transact();
public void feedback() {
System.out.println("给出反馈评价");
System.out.println("---------end----------");
}
//步骤是固定的 不能被重写
public final void process() {
this.takeNumber();
//调用具体的子类业务方法。 也称为钩子方法
this.transact();
this.feedback();
}
}
public class Client {
public static void main(String[] args) {
BankTemplate bank1 = new BankTemplate() {
@Override
public void transact() {
System.out.println("取钱");
}
};
bank1.process();
BankTemplate bank2 = new BankTemplate() {
@Override
public void transact() {
System.out.println("存钱");
}
};
bank2.process();
BankTemplate bank3 = new BankTemplate() {
@Override
public void transact() {
System.out.println("贷款");
}
};
bank3.process();
BankTemplate bank4 = new BankTemplate() {
@Override
public void transact() {
System.out.println("还款");
}
};
bank4.process();
System.exit(0);
}
}
标签:
原文地址:http://www.cnblogs.com/wxisme/p/4540600.html