Method design pattern template pattern code sample

 

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

 

Guess you like

Origin www.cnblogs.com/jun1019/p/11876825.html