美文网首页设计模式
设计模式 - 模板方法模式

设计模式 - 模板方法模式

作者: Mitchell | 来源:发表于2016-03-17 23:13 被阅读42次

    一、模板方法模式

    • AbstractClass 抽象类。
    abstract class AbstractClass
    {
    //一些抽象行为,放到子类中去实现
      public abstract void PrimitiveOperation1();
      public abstract void PrimitiveOperation2();
    
      //模板方法,给出了逻辑的股价,而逻辑的组成是一些相应的抽象操作,它们都推迟到子类中去实现
      public void TemplateMethod()
    {
      PrimitiveOperation1();
      PrimitiveOperation2();
      Console.WriteLine("");
    }
    }
    
    • ConcreteClass 实现父类所定义的一个或多个抽象方法。每一个 AbstractClass 都可以有多个 ConcreteClass 与之对应,而每一个 ConcreteClass 都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。
    class ConcreteClassA: AbstractClass
    {
        public override void PrimitiveOperation1()
        {
            Console.WriteLine("A 方法1实现");
        }
        public override void PrimitiveOperation2()
        {
            Console.WriteLine("A 方法2实现");
        }
    }
    class ConcreteClassB: AbstractClass
    {
        public override void PrimitiveOperation1()
        {
            Console.WriteLine("B 方法1实现");
        }
        public override void PrimitiveOperation2()
        {
            Console.WriteLine("B 方法2实现");
        }
    }
    

    二、模板方法模式的特点

    是通过把不变的行为放到抽象类中,取出子类中的重复代码来体现它的优势。


    三、举例

    using System;
    namespace Factory1
    {
        class TestPaper{
            public void TestQuestion1(){
                Console.WriteLine("maybe TestQuestion1 [ ]a.A b.B c.C d.D");
                Console.WriteLine("answer: " + Answer1());
    
            }
            public void TestQuestion2()
            {
                Console.WriteLine("maybe TestQuestion2 [ ] a.A b.B c.C d.D");
                Console.WriteLine("answer: " + Answer2());
    
            }
            public void TestQuestion3()
            {
                Console.WriteLine("maybe TestQuestion3 [ ] a.A b.B c.C d.D");
                Console.WriteLine("answer: " + Answer3());
            }
            protected virtual string Answer1()
            {
                return "";
            }
            protected virtual string Answer2()
            {
                return "";
            }
            protected virtual string Answer3()
            {
                return "";
            }
        }
        class TestPaperA: TestPaper{
    
    
            protected override string Answer1()
            {
                return "b";
            }
            protected override string Answer2()
            {
                return "c";
            }
            protected override string Answer3()
            {
                return "a";
            }
        }
    
        class TestPaperB: TestPaper{
    
    
            protected override string Answer1()
            {
                return "c";
            }
            protected override string Answer2()
            {
                return "b";
            }
            protected override string Answer3()
            {
                return "a";
            }
        }
      //调用
        class MainClass
        {
            public static void Main (string[] args)
            {
    
                Console.WriteLine ("studentA");
                TestPaper studentA = new TestPaperA ();
                studentA.TestQuestion1 ();
                studentA.TestQuestion2 ();
                studentA.TestQuestion3 ();
    
                TestPaper studentB = new TestPaperB ();
                studentB.TestQuestion1 ();
                studentB.TestQuestion2 ();
                studentB.TestQuestion3 ();
    
                Console.Read ();
            }
        }
    }
    

    +结果:

    studentA
    maybe TestQuestion1 [ ]a.A b.B c.C d.D
    answer: b
    maybe TestQuestion2 [ ] a.A b.B c.C d.D
    answer: c
    maybe TestQuestion3 [ ] a.A b.B c.C d.D
    answer: a
    maybe TestQuestion1 [ ]a.A b.B c.C d.D
    answer: c
    maybe TestQuestion2 [ ] a.A b.B c.C d.D
    answer: b
    maybe TestQuestion3 [ ] a.A b.B c.C d.D
    answer: a

    相关文章

      网友评论

      本文标题:设计模式 - 模板方法模式

      本文链接:https://www.haomeiwen.com/subject/nivclttx.html