设计模式-模板设计模式(行为)
![](https://images2018.cnblogs.com/blog/720263/201809/720263-20180910203108289-1317686930.jpg)
设计模式-模板设计模式(行为)
模板设计模式:如人到餐厅吃饭分为步骤①:点餐,步骤②:吃饭,步骤③:买单,其中一三步骤大多是相同的,步骤二每个人吃什么东西是不同的。于是就把三步封装一个抽象类,有个所有步骤的行为方法,每个人到餐厅吃饭就继承这个类,实现自己的方法。
public abstract class Eat{
public void doEat(){
order();
eating();
pay();
}
public void order(){
//todo 具体实现点餐代码
System.out.println("具体实现点餐代码");
}
/**抽象吃饭*/
public abstract void eating();
public void pay(){
//todo 具体实现买单代码
System.out.println("具体实现买单代码");
if(discount()){
//todo 实现打折代码( 通过钩子方法来确定某步骤是否执行打折)
System.out.println("今天有打折哦");
}
}
public boolean discount(){
//默认没有打折,子类可以覆盖这个钩子方法,从而实现买单是否打折
return false;
}
}
public class MyEat extends Eat {
@Override
public void eating() {
System.out.println("今天吃鸡肉,味道不错。。。");
}
// @Override
// public boolean discount() {
// return true;
// }
}
public class test2 {
public static void main(String[] args) {
MyEat eat = new MyEat();
eat.doEat();
}
}
具体实现点餐代码
今天吃鸡肉,味道不错。。。
具体实现买单代码
如果把MyEat的钩子方法实现覆盖
具体实现点餐代码
今天吃鸡肉,味道不错。。。
具体实现买单代码
今天有打折哦