• 设计模式之—模板方法模式<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

    测试结果:

    要么忍,要么狠,要么滚!
  • 相关阅读:
    线上查询及帮助命令:
    windows: 2.7 3.5 (主要)
    get the execution time of a sql statement.
    java-kafka安装以及使用案例
    java-黑马头条 weex前端路由
    MYSQL安装
    缓存
    Flask中current_app和g对象
    [ValueError: signal only works in main thread]
    Flask-SQLAlchemy操作
  • 原文地址:https://www.cnblogs.com/zxd543/p/3246471.html
Copyright © 2020-2023  润新知