zoukankan      html  css  js  c++  java
  • 【设计模式】模板方法模式

    使用频率:★★★☆☆

    一、什么是模板方法模式

    使用了JAVA的继承机制,在抽象类中定义一个模板方法,该方法引用了若干个抽象方法(由子类实现)或具体方法(子类可以覆盖重写);

    二、补充说明

    其实就是JAVA的继承以及抽象方法、重写覆盖的使用;

    一般把模板方法定义成final避免被子类修改

    三、角色

    抽象模板:定义了一个模板方法和若干抽象方法和具体方法,

    具体模板:继承抽象模板类并实现抽象方法

    客户端Main

    四、例子,JAVA实现

    例子说明:模拟程序员的一天

    抽象模板

    package com.pichen.dp.behavioralpattern.templatemethod;
    
    public abstract class Day {
    
        public void getUp(){
            System.out.println("get up~");
        }
        public abstract void breakfast();
        public abstract void goToWork();
        public abstract void working();
        public abstract void lunch();
        public abstract void goHome();
        public abstract void supper();
        public void sleep(){
            System.out.println("sleep~");
        }
    //模板方法
    public final void process(){ getUp(); breakfast(); goToWork(); working(); lunch(); working(); goHome(); supper(); sleep(); } }

    具体模板

    package com.pichen.dp.behavioralpattern.templatemethod;
    
    public class ProgrammerDay extends Day{
    
        /**
         * @see com.pichen.dp.behavioralpattern.templatemethod.Day#breakfast()
         */
        @Override
        public void breakfast() {
            System.out.println("breakfast:noodle~");
            
        }
    
        /**
         * @see com.pichen.dp.behavioralpattern.templatemethod.Day#goToWork()
         */
        @Override
        public void goToWork() {
            System.out.println("goToWork:drive car~");
            
        }
    
        /**
         * @see com.pichen.dp.behavioralpattern.templatemethod.Day#working()
         */
        @Override
        public void working() {
            System.out.println("working: coding~");
            
        }
    
        /**
         * @see com.pichen.dp.behavioralpattern.templatemethod.Day#lunch()
         */
        @Override
        public void lunch() {
            System.out.println("lunch: eat rice~");
            
        }
    
        /**
         * @see com.pichen.dp.behavioralpattern.templatemethod.Day#goHome()
         */
        @Override
        public void goHome() {
            System.out.println("goHome: walk~");
        }
    
        /**
         * @see com.pichen.dp.behavioralpattern.templatemethod.Day#supper()
         */
        @Override
        public void supper() {
            System.out.println("supper: rice~");
        }
    
    }

    客户端

    package com.pichen.dp.behavioralpattern.templatemethod;
    
    public class Main {
    
        public static void main(String[] args) {
            Day programmerDay = new ProgrammerDay();
            programmerDay.process();
        }
    }

    结果打印:

    get up~
    breakfast:noodle~
    goToWork:drive car~
    working: coding~
    lunch: eat rice~
    working: coding~
    goHome: walk~
    supper: rice~
    sleep~
  • 相关阅读:
    规约先行-(十五)索引规约
    规约先行-(十四)建表规约
    规约先行-(十三)安全规约
    规约先行-(十二)单元测试
    异常日志-(十一)日志规约
    异常日志-(十)异常处理
    10.25-ROS2安装
    安装sensor-sdk
    jz2440操作速查
    新版本uboot启动流程分析
  • 原文地址:https://www.cnblogs.com/chenpi/p/5217430.html
Copyright © 2011-2022 走看看