模板方法模式 : 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新算法.重新定义算法中的某些步骤.
咖啡因饮料超类
咖啡
咖啡中可以利用勾子方法.可以直接使用超类的.
茶
勾子方法作用,如超类解耦.子类实行具体动作.超类确定是否执行.(别找我,我会找你的)
咖啡因饮料超类
/**
* 咖啡因饮料超类
* @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;
}
}
勾子方法作用,如超类解耦.子类实行具体动作.超类确定是否执行.(别找我,我会找你的)