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

    在模板模式(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---");
        }
    }
    
    
    
  • 相关阅读:
    1.Android 视图及View绘制分析笔记之setContentView
    Android 6.0
    include、merge 、ViewStub
    Vitamio视频播放器
    EventBus 二
    EventBus 一
    ZJOI2002 昂贵的聘礼
    [POI2009]WIE-Hexer
    UVA 11440 Help Tomisu
    洛谷 2448 无尽的生命
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14658177.html
Copyright © 2011-2022 走看看