模板方法设计模式:定义了一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中。
模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。
我们举一个简单的例子:
例如我们买一个手抓饼,手抓饼有一个最为普通的标准版,也就是所谓的原味,里面什么都不加。无论谁来买,无论你是要辣的不辣的,要生菜还是鸡蛋还是里脊等等,都是在这个原味的基础上另外添加的。因此,制作手抓饼的过程如果是一个算法的话,那整个算法的结构就是制作一个标准手抓饼,然后加入一些东西,而这些东西是可变的,根据不同的人而有所变化。我们把这一部分可变的放到子类中去实现,不改变整个算法的结构。
public class Test {
public static void main(String[] args) {
Food g = new Girl();
g.makeFood();
}
}
class Girl extends Food{
public boolean result(){
return true;
}
}
class Boy extends Food{
public boolean result(){
return false;
}
}
abstract class Food{
public void makeFood(){
System.out.println("开始制作手抓饼。。。");
System.out.println("原味的已经做好了。");
if(result()){
System.out.println("最后放点辣椒。");
}
else{
System.out.println("最后放点甜蜜酱。");
}
}
public abstract boolean result();
}
这段程序中,我们把要辣的还是要甜的这一可变的部分放到子类中去实现,而“开始制作手抓饼”与“原味的已经做好了”是共有的部分,我们不改变整个过程的结构。
其中result()是抽象方法,在子类中去实现,即可变的部分。
在主函数中,通过实例化不同的子类对象来区分。