1, the abstract class curriculum
/ ** * courses abstract class * / public abstract class ACourse { / ** * The method of making course template * / protected Final void makeCourse () { the this .makePPT (); // mandatory step the this .makeVideo (); // Required steps IF (needWriteArticle ()) { the this .writeArticle (); // optional step } the this .packageCourse (); // step subclass implemented } / ** * making the PPT * / Final void makePPT () { System.out.println ( "making the PPT" ); } / ** * video recording * / Final void makeVideo () { System.out.println ( "Video Recording" ); } / ** * Notes written * / Final void writeArticle () { System.out.println ( "written notes" ); } / ** * Notes written if * (hook methods) * * @return * / protected Boolean needWriteArticle () { return to false ; } / ** * Packaging Course (abstract method, by subclasses to achieve) * / abstract void packageCourse (); }
2, the front end of the class curriculum
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, front-end programs like Vue
/ ** * Vue Course * / public class VueFECourse the extends FECourse { / ** * Notes written if * * @param needWriteArticleFlag * / public VueFECourse ( Boolean needWriteArticleFlag) { Super (needWriteArticleFlag); } }
4, the front Reactor class curriculum
/ ** * the Reactor program * / public class ReactorFECourse the extends FECourse { / ** * Notes written if * * @param needWriteArticleFlag * / public ReactorFECourse ( Boolean needWriteArticleFlag) { Super (needWriteArticleFlag); } }
5, design patterns class curriculum
public class DesignPatternCourse the extends ACourse { @Override void packageCourse () { System.out.println ( "Course Design Mode" ); } / ** * Notes written if * * @return * / @Override protected Boolean needWriteArticle () { return to true ; } }
6, the test class
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(); } }
Run the test results of the implementation class:
PPT production record video writing notes design patterns course --------------------------- making PPT recording video provides front-end source code to provide front-end multimedia material - ------------------------- making PPT recording video writing notes to provide front-end source code to provide front-end multimedia material