论坛首页 Java企业应用论坛

hand first 设计模式 -模板方法模式

浏览 1567 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-01   最后修改:2009-07-01
模板方法模式 : 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新算法.重新定义算法中的某些步骤.


咖啡因饮料超类
/**
 * 咖啡因饮料超类
 * @author panxiuyan
 *
 */
public abstract class CaffeinBeverage {

	/**
	 * 制作方法
	 */
	public void perareRecip() {
		boilWater();
		brew();
		pourInCup();
		if (customerWantsCondiments()) {
			addCondimenes();
		}

	}

	/**
	 * 冲泡
	 */
	public abstract void brew();

	/**
	 * 添加相关的配料
	 */
	public abstract void addCondimenes();

	/**
	 * 把水烧开
	 */
	public void boilWater() {
		System.out.println("Boiling water");
	}

	/**
	 * 将饭料倒入杯子
	 */
	public void pourInCup() {

		System.out.println("Pouring into cup");

	}

	/**
	 * 是否添加相关的配料--勾子程序
	 * @return
	 */
	public boolean customerWantsCondiments() {
		return true;
	}

}



咖啡
public class Coffee extends CaffeinBeverage {

	//重做父类的方法
         @Override
	public void addCondimenes() {
		// TODO Auto-generated method stub

	}

	@Override
	public void brew() {
		// TODO Auto-generated method stub

	}

     

}


咖啡中可以利用勾子方法.可以直接使用超类的.


public class Tea extends CaffeinBeverage {

	@Override
	public void addCondimenes() {
		// TODO Auto-generated method stub

	}

	@Override
	public void brew() {
		// TODO Auto-generated method stub

	}
	
         //使用勾子方法茶不加入配料
	@Override
	public boolean customerWantsCondiments(){
		return false;
		
	}
}



勾子方法作用,如超类解耦.子类实行具体动作.超类确定是否执行.(别找我,我会找你的)


论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics