• 设计模式 — 模板模式


    实现形式:抽象类定义了执行的方法(方法包含若干步骤),具体的步骤由子类重写实现。

    使用场景: 

    • 有多个子类共同的步骤方法
    • 有重要的、复杂的共用方法

    代码实例:

      代码场景:需要定义一个吃饭的模板,不管男人还是女人都要按照指定模板步骤进行吃饭。步骤为拿碗、吃饭、洗碗。

    抽象模板类:AbstractEat

    /**
     * 吃饭 抽象类
     * @author GaoYuan
     * @date 2018/11/11 下午7:21
     */
    public abstract class AbstractEat {
    
        /** 定义了吃饭的步骤(模板) */
        public final void eat(){
            getBowl();
            startEat();
            washBowl();
        }
    
        /** 拿碗 */
        abstract void getBowl();
        /** 吃饭 */
        abstract void startEat();
        /** 洗碗 */
        abstract void washBowl();
    
    }

    具体实现子类 ManEat、WomanEat

    /**
     * 男人吃饭
     * @author GaoYuan
     * @date 2018/11/11 下午7:21
     */
    public class ManEat extends AbstractEat{
    
        @Override
        void getBowl() {
            System.out.println("ManEat getBowl()");
        }
    
        @Override
        void startEat() {
            System.out.println("ManEat startEat()");
        }
    
        @Override
        void washBowl() {
            System.out.println("ManEat washBowl()");
        }
    }
    /**
     * 女人吃饭
     * @author GaoYuan
     * @date 2018/11/11 下午7:21
     */
    public class WomanEat extends AbstractEat{
    
        @Override
        void getBowl() {
            System.out.println("WomanEat getBowl()");
        }
    
        @Override
        void startEat() {
            System.out.println("WomanEat startEat()");
        }
    
        @Override
        void washBowl() {
            System.out.println("WomanEat washBowl()");
        }
    }

    测试

    public static void main(String[] args){
        // 男人吃饭
        AbstractEat eat = new ManEat();
        eat.eat();
        // 女人吃饭
        eat = new WomanEat();
        eat.eat();
    }

    结果输出:

    ManEat getBowl()
    ManEat startEat()
    ManEat washBowl()
    WomanEat getBowl()
    WomanEat startEat()
    WomanEat washBowl()

    转自:https://www.liangzl.com/get-article-detail-29577.html

  • 相关阅读:
    内核初始化. Part 4【转】
    fixmap addresses原理【转】
    linux内核调试项【转】
    Linux Suspend流程分析【转】
    Linux电源管理-Suspend/Resume流程【转】
    Linux驱动开发常用调试工具---之内存读写工具devmem和devkmem【转】
    内核regmap机制【转】
    ARM NVIC控制器(基于cortex-M4)【转】
    Linux设备树语法详解-中断【转】
    [Go] 第一个单词首字母变大写:Ucfirst(),第一个单词首字母变小写:Lcfirst()
  • 原文地址:https://www.cnblogs.com/myseries/p/10837349.html
Copyright © 2020-2023  润新知