zoukankan      html  css  js  c++  java
  • 大话设计-模板方法模式

    在基类定义算法的结构,具体实现延迟到子类。

    using System;
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestPaper testPaperA = new TestPaperA();
                testPaperA.TestQuestion1();
                testPaperA.TestQuestion2();
                testPaperA.TestQuestion3();
                TestPaper testPaperB = new TestPaperB();
                testPaperB.TestQuestion1();
                testPaperB.TestQuestion2();
                testPaperB.TestQuestion3();
            }
        }
    
        class TestPaper
        {
            // 把骨架定义下来,只有答案不同,让子类实现具体答案。
            public void TestQuestion1()
            {
                Console.WriteLine("题目1:XXXXXXYYYYXXXMMM");
                Console.WriteLine($"题目1答案:{Answer1()}");
            }
            protected virtual string Answer1() { return ""; }    
                    
            public void TestQuestion2()
            {
                Console.WriteLine("题目2:IIIPPPKKKKK");
                Console.WriteLine($"题目2答案:{Answer2()}");
            }
            protected virtual string Answer2() { return ""; }
    
            public void TestQuestion3()
            {
                Console.WriteLine("题目3:UUUUKKKKOOO");
                Console.WriteLine($"题目3答案:{Answer3()}");
            }
            protected virtual string Answer3() { return ""; }
        }
    
        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 "a";
            }
        }
    }
    View Code
    using System;
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                ConcreteClass concreteClass = new ConcreteClass();
                concreteClass.TemplateMethod();
            }
        }  
    
       abstract class AbstractClass
        {
            public abstract void PrimitiveOperation1();
            public abstract void PrimitiveOperation2();
            public void TemplateMethod()
            {
                PrimitiveOperation1();
                PrimitiveOperation2();
                Console.WriteLine("");
            }
        }
    
        class ConcreteClass : AbstractClass
        {
            public override void PrimitiveOperation1()
            {
                Console.WriteLine("具体操作1");
            }
    
            public override void PrimitiveOperation2()
            {
                Console.WriteLine("具体操作2");
            }
        }
    }
  • 相关阅读:
    正则表达式(含递归用法)
    hive tricks
    树的数据结构
    基本排序算法
    佛祖保佑永无BUG
    客户问:“能再便宜点吗”,90%的销售顾问都回答错了?
    AutoMapper的介绍与使用(二)
    AutoMapper的介绍与使用(一)
    hasattr()、getattr()、setattr()函数的使用
    类与对象-内存存储形态
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/template.html
Copyright © 2011-2022 走看看