美文网首页
设计模式-模板方法(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