package com.example.designmodel;
/**
* 模板模式-模板方法模式
*/
public class TemplateModel {
/**
* 喝东西的时候,两个动作,倒饮品fillUp,喝drink。
*/
public abstract class Drink{
//钩子方法-模板方法模式加入控制项控制方法的执行。
private Boolean isFilled;
public abstract void fillUp();
public abstract void drink();
public void haveDrink(){
if(!isFilled){
fillUp();
}
drink();
}
}
/**
* 牛奶继承模板,倒牛奶,喝牛奶。
*/
public class Milk extends Drink{
Milk(Boolean isFilled){
super.isFilled = isFilled;
}
@Override
public void fillUp() {
System.out.println("来人,给我倒点牛奶!");
}
@Override
public void drink() {
System.out.println("干杯吧,牛奶!");
}
@Override
public void haveDrink() {
super.haveDrink();
}
}
public static void main(String[] args){
TemplateModel templateModel = new TemplateModel();
//没有牛奶,需要倒牛奶
Milk milk = templateModel.new Milk(false);
milk.haveDrink();
//刚才倒的还没喝完呢
Milk againDrink = templateModel.new Milk(true);
againDrink.haveDrink();
}
}