设计模式之模板方法模式

  1. 通过AB卷来简单梳理模板方法模式
    1. 模板方法模式实现
      1. 定义试卷基类
      2. 定义业务方法
      3. 执行结果
      4. 结果分析
  2. 联系作者
    1. 微信公众号
    2. QQ群

通过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

结果分析

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

联系作者

微信公众号

xiaomingxiaola
(BossLiu)

QQ群

58726094


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 384276224@qq.com

×

喜欢就点赞,疼爱就打赏

日记本 网文世界