zoukankan      html  css  js  c++  java
  • 设计模式-模板设计模式(行为)

    设计模式-模板设计模式(行为)
    模板设计模式:如人到餐厅吃饭分为步骤①:点餐,步骤②:吃饭,步骤③:买单,其中一三步骤大多是相同的,步骤二每个人吃什么东西是不同的。于是就把三步封装一个抽象类,有个所有步骤的行为方法,每个人到餐厅吃饭就继承这个类,实现自己的方法。
     
    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的钩子方法实现覆盖
    
    具体实现点餐代码
    今天吃鸡肉,味道不错。。。
    具体实现买单代码
    今天有打折哦
  • 相关阅读:
    Core Animation系列之CADisplayLink(转)
    由App的启动说起(转)
    Xcode断点的一些黑魔法
    好代码的标准
    Java JPS找不到正在执行的java进程 jps cannot see running java process
    JetBrain server certificate is not trusted 弹出框
    Window7 定制 Explore中的右键菜单
    Go语言入门: Chapter1
    针对缓存在Redis中的聊天消息的持久化方案分析
    轻型Database- sqlite入门
  • 原文地址:https://www.cnblogs.com/nedhome/p/9622654.html
Copyright © 2011-2022 走看看