美文网首页
设计模式-模板方法(Template Method)模式

设计模式-模板方法(Template Method)模式

作者: qyfl | 来源:发表于2019-10-10 21:13 被阅读0次

    主要角色

    • 抽象类
    • 具体类

    职责

    一次性实现一个算法中不变的部分,将可变的部分留给子类实现。

    角色关系

    • 抽象类,负责实现算法的流程。
    • 抽象类,继承父类,将算法的流程中可变的部分实现自己的逻辑。

    类图

    类关系示意图

    代码

    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---");
        }
    }
    

    技巧

    • 这是我认为所有的设计模式中最简单的设计模式。

    相关文章

      网友评论

          本文标题:设计模式-模板方法(Template Method)模式

          本文链接:https://www.haomeiwen.com/subject/jizapctx.html