• 【设计模式】模板方法模式


    使用频率:★★★☆☆

    一、什么是模板方法模式

    使用了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~
  • 相关阅读:
    Page.EnableViewStateMac 属性
    ASP.NET2.0权限/角色管理表aspnet_Membership解析(转)
    Request.ServerVariables(HTTP_REFERER)
    对象不能从DBNull 转换为其他类型
    ASP.NET角色管理配置
    TextBox保存的文本在Label中显示
    SET NOCOUNT ON
    浅论ViewState及其与Session的关系(转)
    ASP.NET2.0权限/角色管理表aspnet_Applications解析(转)
    动态编辑控件宽高
  • 原文地址:https://www.cnblogs.com/chenpi/p/5217430.html
Copyright © 2020-2023  润新知