zoukankan      html  css  js  c++  java
  • 设计模式 — 模板模式

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

    使用场景: 

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

    代码实例:

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

    抽象模板类: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

  • 相关阅读:
    Lua学习笔记(二):基本语法
    Lua学习笔记(一):搭建开发环境
    C#学习笔记(十六):Attribute
    [U3D Demo] 手机FPS射击游戏
    C#学习笔记(十五):预处理指令
    js 树菜单 ztree
    jquery flexslider 轮播插件
    浏览器 本地预览图片 window.url.createobjecturl
    mouseover mouseenter mouseout mouseleave
    jquery checkbox问题
  • 原文地址:https://www.cnblogs.com/myseries/p/10837349.html
Copyright © 2011-2022 走看看