设计模式-模板设计模式(行为)

设计模式-模板设计模式(行为)
模板设计模式:如人到餐厅吃饭分为步骤①:点餐,步骤②:吃饭,步骤③:买单,其中一三步骤大多是相同的,步骤二每个人吃什么东西是不同的。于是就把三步封装一个抽象类,有个所有步骤的行为方法,每个人到餐厅吃饭就继承这个类,实现自己的方法。
 
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的钩子方法实现覆盖

具体实现点餐代码
今天吃鸡肉,味道不错。。。
具体实现买单代码
今天有打折哦
原文地址:https://www.cnblogs.com/nedhome/p/9622654.html