设计模式之模板方法模式代码示例
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 录制视频 编写手记 提供前端源代码 提供前端多媒体素材
以上是关于设计模式之模板方法模式代码示例的主要内容,如果未能解决你的问题,请参考以下文章
设计模式模板方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )