• 设计模式-模板方法模式


    在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
    主要解决:一些方法通用,却在每一个子类都重新写了这一方法。
    JAVA应用:
    java.util.AbstractList
    javax.servlet.http.HttpServlet
    org.apache.ibatis.executor.BaseExecutor


    public abstract class ACourse {
    
        protected final void makeCourse(){
            this.makePPT();
            this.makeVideo();
            if(needWriteArticle()){
                this.writeArticle();
            }
            this.packageCourse();
        }
    
        final void makePPT(){
            System.out.println("制作PPT");
        }
        final void makeVideo(){
            System.out.println("制作视频");
        }
        final void writeArticle(){
            System.out.println("编写手记");
        }
        //钩子方法
        protected boolean needWriteArticle(){
            return false;
        }
        abstract void packageCourse();
    
    }
    public class DesignPatternCourse extends ACourse {
        @Override
        void packageCourse() {
            System.out.println("提供课程Java源代码");
        }
    
        @Override
        protected boolean needWriteArticle() {
            return true;
        }
    
    }
    public class FECourse extends ACourse {
        private boolean needWriteArticleFlag = false;
        @Override
        void packageCourse() {
            System.out.println("提供课程的前端代码");
            System.out.println("提供课程的图片等多媒体素材");
        }
    
        public FECourse(boolean needWriteArticleFlag) {
            this.needWriteArticleFlag = needWriteArticleFlag;
        }
    
        @Override
        protected boolean needWriteArticle() {
            return this.needWriteArticleFlag;
        }
    }
    public class Test {
        public static void main(String[] args) {
    //        System.out.println("后端设计模式课程start---");
    //        ACourse designPatternCourse = new DesignPatternCourse();
    //        designPatternCourse.makeCourse();
    //        System.out.println("后端设计模式课程end---");
    
    
            System.out.println("前端课程start---");
            ACourse feCourse = new FECourse(false);
            feCourse.makeCourse();
            System.out.println("前端课程end---");
        }
    }
    
    
    
  • 相关阅读:
    协议分析 - DHCP协议解码详解
    在SqlServer2000的视图中小心使用*符号
    sql 将 varchar 值转换为数据类型为 int 的列时发生语法错误 的解决办法
    LECCO SQL Expert工具之优化sql语句
    css+js简单应用
    对任何一天是星期几算法的实现
    asp.net ajax 1.0 出现"sys"未定义解决方法
    js日历脚本
    在ASP.NET中重写URL
    在ASP.NET中重写URL (续篇)
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14658177.html
Copyright © 2020-2023  润新知