设计模式——模板方法模式

      模板方法模式:模板方法模式是编程中经常用到的模式,它定义了一个操 作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在 不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。

     核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不 能确定。因此采用工厂方法模式将这个节点的代码实现转移给子类完成 即:处理步骤父类中定义好,具体实现延迟到子类中定义。 模板方法模式的使用场景:实现一个算法时,整体步骤很固定。但是某些部分易变。易变部分可以抽象出来,供子类实现。

     开发中的场景: 数据库访问的封装。 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);
	}

}

 

posted @ 2015-05-30 16:53  Pickle  阅读(583)  评论(0编辑  收藏  举报