设计模式之—模板方法模式<Templete Method pattern>

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

模板方法模式是通过把不变的行为搬移到超类,去除子类中重复的代码来体现它的优势。提供一个很好的代码复用平台。

以考试试题为例:不同的只有选项

试卷类(TestPaper):(注释的代码是另外的实现方式。均为模板方法模式)

namespace Templete_Method_Pattern
{
    class StudentA:TestPaper
    {
        //public override string AnswerA()
        //{
        //    return "A";
        //}

        //public override string AnswerB()
        //{
        //    return "B";
        //}

        public override string TestQuestionA()
        {
            return "A";
        }

        public override string TestQusetionB()
        {
            return "B";
        }
    }
}
View Code

学生A的试卷类(StudentA):继承于试卷类(TestPaper)

namespace Templete_Method_Pattern
{
    class StudentA:TestPaper
    {
        //public override string AnswerA()
        //{
        //    return "A";
        //}

        //public override string AnswerB()
        //{
        //    return "B";
        //}

        public override string TestQuestionA()
        {
            return "A";
        }

        public override string TestQusetionB()
        {
            return "B";
        }
    }
}
View Code

学生B的试卷类(StudentB):继承于试卷类(TestPaper)

namespace Templete_Method_Pattern
{
    class StudentB:TestPaper
    {
        //public override string AnswerA()
        //{
        //    return "C";
        //}

        //public override string AnswerB()
        //{
        //    return "D";
        //}

        public override string TestQuestionA()
        {
            return "C";
        }

        public override string TestQusetionB()
        {
            return "D";
        }
    }
}
View Code

测试类(TestMain)

namespace Templete_Method_Pattern
{
    class TestMain
    {
        static void Main(string[] args)
        {
            Console.WriteLine("学生A的试卷:");
            TestPaper A = new StudentA();
            A.TempleteMethod();
            //A.TestQuestionA();
            //A.TestQuestionB();

            Console.WriteLine("学生B的试卷:");
            TestPaper B = new StudentB();
            B.TempleteMethod();
            //B.TestQuestionA();
            //B.TestQuestionB();

            Console.ReadLine();
        }
    }
}
View Code

测试结果:

要么忍,要么狠,要么滚!
原文地址:https://www.cnblogs.com/zxd543/p/3246471.html