Administrator
发布于 2024-07-31 / 24 阅读
0
0

模板方法模式

问题描述

老师在黑板上抄作业,同学们在下面先抄作业,再做答案。经常有同学眼神不好,会把作业抄错。

但在考试时,就不会有这样情况,因为大家拿到的试卷都是一样的。这里考试试卷类似于模板,提取了相同部分。

代码实现

抽象试卷类

abstract class TestPaper
{ 
    public void TestQuestion1()
    {
        Console.WriteLine("问题1");
        Console.WriteLine("答案:" + Answer1());
    }

    public void TestQuestion2()
    {
        Console.WriteLine("问题2");
        Console.WriteLine("答案:" + Answer2());
    }

    public void TestQuestion3()
    {
        Console.WriteLine("问题3");
        Console.WriteLine("答案:" + Answer3());
    }

    protected abstract string Answer1();
    protected abstract string Answer2();
    protected abstract string Answer3();
}

学生甲抄试卷的具体类

class TestPaperA : TestPaper
{
    protected override string Answer1()
    {
        return "A";
    }

    protected override string Answer2()
    {
        return "B";
    }

    protected override string Answer3()
    {
        return "C";
    }
}

学生乙抄试卷的具体类

class TestPaperB : TestPaper
{
    protected override string Answer1()
    {
        return "B";
    }

    protected override string Answer2()
    {
        return "C";
    }

    protected override string Answer3()
    {
        return "D";
    }
}

客户端代码

    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("学生甲的答案:");
            TestPaper studentA = new TestPaperA();
            studentA.TestQuestion1();
            studentA.TestQuestion2();
            studentA.TestQuestion3();

            Console.WriteLine("学生乙的答案:");
            TestPaper studentB = new TestPaperB();
            studentB.TestQuestion1();
            studentB.TestQuestion2();
            studentB.TestQuestion3();
        }
    }

执行结果:

学生甲的答案:
问题1
答案:A
问题2
答案:B
问题3
答案:C
学生乙的答案:
问题1
答案:B
问题2
答案:C
问题3
答案:D

UML图


评论