设计模式之模板方法模式代码示例

Posted jun1019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之模板方法模式代码示例相关的知识,希望对你有一定的参考价值。

 

1、课程抽象类

/**
 * 课程抽象类
 */
public abstract class ACourse {

    /**
     * 制作课程 模板方法
     */
    protected final void makeCourse() {
        this.makePPT();// 必选步骤
        this.makeVideo();// 必选步骤
        if (needWriteArticle()) {
            this.writeArticle();// 可选步骤
        }
        this.packageCourse();// 子类实现的步骤
    }

    /**
     * 制作PPT
     */
    final void makePPT() {
        System.out.println("制作PPT");
    }

    /**
     * 录制视频
     */
    final void makeVideo() {
        System.out.println("录制视频");
    }

    /**
     * 编写手记
     */
    final void writeArticle() {
        System.out.println("编写手记");
    }

    /**
     * 是否编写手记
     * (钩子方法)
     *
     * @return
     */
    protected boolean needWriteArticle() {
        return false;
    }

    /**
     * 打包课程(抽象方法,由子类去实现)
     */
    abstract void packageCourse();
}

 

 

2、前端课程类

public class FECourse extends ACourse {

    private boolean needWriteArticleFlag;

    public FECourse(boolean needWriteArticleFlag) {
        this.needWriteArticleFlag = needWriteArticleFlag;
    }

    @Override
    void packageCourse() {
        System.out.println("提供前端源代码");
        System.out.println("提供前端多媒体素材");
    }

    @Override
    protected boolean needWriteArticle() {
        return this.needWriteArticleFlag;
    }
}

 

 

3、前端Vue课程类

/**
 * Vue 课程
 */
public class VueFECourse extends FECourse {

    /**
     * 是否编写手记
     *
     * @param needWriteArticleFlag
     */
    public VueFECourse(boolean needWriteArticleFlag) {
        super(needWriteArticleFlag);
    }
}

 

 

4、前端Reactor课程类

/**
 * Reactor 课程
 */
public class ReactorFECourse extends FECourse {

    /**
     * 是否编写手记
     *
     * @param needWriteArticleFlag
     */
    public ReactorFECourse(boolean needWriteArticleFlag) {
        super(needWriteArticleFlag);
    }
}

 

5、设计模式课程类

public class DesignPatternCourse extends ACourse {

    @Override
    void packageCourse() {
        System.out.println("设计模式课程");
    }

    /**
     * 是否编写手记
     *
     * @return
     */
    @Override
    protected boolean needWriteArticle() {
        return true;
    }
}

 

6、测试类

public class MainTest {

    public static void main(String[] args) {
        DesignPatternCourse designPatternCourse = new DesignPatternCourse();
        designPatternCourse.makeCourse();

        System.out.println("---------------------------");

        VueFECourse vueFECourse = new VueFECourse(false);
        vueFECourse.makeCourse();

        System.out.println("---------------------------");

        ReactorFECourse reactorFECourse = new ReactorFECourse(true);
        reactorFECourse.makeCourse();
    }
}

 

运行测试类执行结果:

制作PPT
录制视频
编写手记
设计模式课程
---------------------------
制作PPT
录制视频
提供前端源代码
提供前端多媒体素材
---------------------------
制作PPT
录制视频
编写手记
提供前端源代码
提供前端多媒体素材

 

以上是关于设计模式之模板方法模式代码示例的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之模板方法模式

设计模式模板方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

行为型设计模式之模板方法模式

设计模式之模板方法模式实战解析

设计模式 行为型模式 -- 模板方法模式(定义示例JDK源码解析 InputStream)

GOF23设计模式之模板方法模式(template method)