阅读背景:

[初级]设计模式--模板方法模式

来源:互联网 

 

/**
 * 模板办法模式
 * 
 * 实现算法时,整体进程很固定,只有部份易转变
 * 则可以将固定的部份提取到父类中实现,由子类实现易变的部份
 * 
 * 根本办法:
 * 	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();
	}
}/**
 * 模板办法模式
 * 
 * 实现算法时,整体进程很固定,只有部份易转变
 * 则




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: