美文网首页
四、模板方法模式

四、模板方法模式

作者: 奔跑吧老王 | 来源:发表于2020-04-01 08:45 被阅读0次

话不多说,先来类图:

image.png

抽象模板类

@Data
public abstract class Paper {

    public boolean flag=true;
    public void testQuestion1() {

        System.out.println("杨过得到,后来给了郭靖," +
                "炼成倚天剑、屠龙刀的玄铁可能是[ ]\n" +
                "a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维");
        System.out.println("答案: " + answer1());
    }

    public void testQuestion2() {

        System.out.println("杨过、程英、陆无双铲除了情花,造成[ ]\n" +
                "a.使这种植物不再伤人 b.使一种珍惜物种灭绝\n" +
                "c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化");
        System.out.println("答案: " + answer2());
    }

    public void testQuestion3() {

        System.out.println("蓝凤凰致使华山师徒、桃谷六仙呕吐不止," +
                "如果你是大夫,会给他们开什么药[ ]\n" +
                "a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶");
        System.out.println("答案: " + answer3());
    }

    public void additionalQuestion(){

        System.out.println("附加题");
        //钩子函数
        if(isChooseAdditionalQuestion()){
            System.out.println("附加题答案:"+additionalAnswer());
        }
    }

    abstract String answer1();

    abstract String answer2();

    abstract String answer3();

    abstract String additionalAnswer();

    public Boolean isChooseAdditionalQuestion(){
        return flag;
    }
}

模板实现子类A

public class PaperA extends Paper {

    @Override
    public String answer1() {
        return "d";
    }

    @Override
    public String answer2() {
        return "c";
    }

    @Override
    public String answer3() {
        return "c";
    }

    @Override
    String additionalAnswer() {
        return null;
    }
}

模板实现子类B

public class PaperB extends Paper {

    @Override
    public String answer1() {
        return "a";
    }

    @Override
    public String answer2() {
        return "a";
    }

    @Override
    public String answer3() {
        return "a";
    }

    @Override
    String additionalAnswer() {
        return "e";
    }
}

操作类,可以封装上线文

public class TestPaperClient {

    public static void main(String[] args) {

        System.out.println("学生甲抄的试卷:");
        PaperA studentA = new PaperA();
        studentA.setFlag(false);
        studentA.testQuestion1();
        studentA.testQuestion2();
        studentA.testQuestion3();
        studentA.additionalQuestion();

        System.out.println();

        System.out.println("学生乙抄的试卷:");
        PaperB studentB = new PaperB();
        studentB.testQuestion1();
        studentB.testQuestion2();
        studentB.testQuestion3();
        studentB.additionalQuestion();
    }
}

模板方法可以添加钩子函数,欧尼呼吁一些特殊的实现,比如附件题不是每个人都会选择的!!!

相关文章

网友评论

      本文标题:四、模板方法模式

      本文链接:https://www.haomeiwen.com/subject/nastphtx.html