设计模式之模板方法模式

通过AB卷来简单梳理模板方法模式

学生时代考试时,经常涉及到AB卷,假如现在需要出两套试卷,试题及答案有差异但不大,这个时候该如何设计呢?
我们可以用模板方法模式来考虑这个问题。

模板方法模式实现

定义试卷基类

首先定义一个试卷基类,方便真实的试卷来继承公用的部分

public class TestPaper {
    public void TestQuestion1(){
        System.out.println("问题1");
        System.out.println("答案1:"+Answer1());
    }
    protected String Answer1(){
        return "";
    }

    public void TestQuestion2(){
        System.out.println("问题2");
        System.out.println("答案2:"+Answer2());
    }
    protected String Answer2(){
        return "";
    }

    public void TestQuestion3(){
        System.out.println("问题3");
        System.out.println("答案3:"+Answer3());
    }
    protected String Answer3(){
        return "";
    }
}

定义具体的实现类

public class TestPaperA extends TestPaper{
    @Override
    public String Answer1(){
        return "a";
    }

    @Override
    public String Answer2(){
        return "b";
    }

    @Override
    public String Answer3(){
        return "c";
    }
}
public class TestPaperB extends TestPaper{
    @Override
    public String Answer1(){
        return "d";
    }

    @Override
    public String Answer2(){
        return "e";
    }

    @Override
    public String Answer3(){
        return "f";
    }
}

定义业务方法

看在具体业务逻辑中如何使用

public class TemplateMethod {
    public static void main(String[] args) {
        //模板方法模式
        func1();
    }

    public static void func1(){
        System.out.println("A试卷:");
        TestPaper paperA = new TestPaperA();
        paperA.TestQuestion1();
        paperA.TestQuestion2();
        paperA.TestQuestion3();

        System.out.println("B试卷:");
        TestPaper paperB = new TestPaperB();
        paperB.TestQuestion1();
        paperB.TestQuestion2();
        paperB.TestQuestion3();
    }
}

执行结果

A试卷:
问题1
答案1:a
问题2
答案2:b
问题3
答案3:c
B试卷:
问题1
答案1:d
问题2
答案2:e
问题3
答案3:f

结果分析

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

https://xmlrambo.github.io/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值