中国平面设计网站,外贸视频网站,长基建站,网站建设用户需求表当你在设计一个业务功能时#xff0c;有一些方法/算法的结构是固定的#xff0c;但其中的某些步骤可能会因不同的情境而发生不同的变化。你希望固定核心结构部分#xff0c;然后灵活的去定制一些特定的步骤。这个时候可以考虑使用模板方法#xff0c;通过定义一个抽象的父类…当你在设计一个业务功能时有一些方法/算法的结构是固定的但其中的某些步骤可能会因不同的情境而发生不同的变化。你希望固定核心结构部分然后灵活的去定制一些特定的步骤。这个时候可以考虑使用模板方法通过定义一个抽象的父类其中包含了方法/算法的核心结构但某些步骤使用抽象方法或受保护的虚拟方法来表示这些方法由子类来实现。这使得子类可以在不改变核心方法的同时根据需要重写特定的步骤。父类中的模板方法调用这些步骤确保算法的整体流程一致。
假定一个网课流程的例子
/*** 抽象课程*/
public abstract class AbstractCourse {protected void createPPT() {System.out.println(制作课件);}protected void liveVideo() {System.out.println(教学直播);}protected void postNote() {System.out.println(上传课堂笔记);}protected void postHomeWork() {System.out.println(布置作业);}protected boolean needCheckHomework() {return false;}protected abstract void checkHomework();public final void createCourse() {createPPT();liveVideo();postNote();postHomeWork();if (needCheckHomework()) {checkHomework();}}
}/*** java课程*/
Setter
public class JavaCourse extends AbstractCourse {private boolean needCheckHomeWork false;Overrideprotected boolean needCheckHomework() {return this.needCheckHomeWork;}Overrideprotected void checkHomework() {System.out.println(检查Java作业);}
}/*** python课程*/
public class PythonCourse extends AbstractCourse {Overrideprotected void checkHomework() {System.out.println(检查python作业);}
}
编写测试用例 /*** 模板方法-课程流程测试*/Testpublic void testTemplateMethod() {System.out.println(Java课程);JavaCourse javaCourse new JavaCourse();javaCourse.setNeedCheckHomeWork(true);javaCourse.createCourse();System.out.println(Python课程);PythonCourse pythonCourse new PythonCourse();pythonCourse.createCourse();}