設(shè)計(jì)模式 - 模板方法模式

一、模板方法模式

  • AbstractClass 抽象類。
abstract class AbstractClass
{
//一些抽象行為,放到子類中去實(shí)現(xiàn)
  public abstract void PrimitiveOperation1();
  public abstract void PrimitiveOperation2();

  //模板方法,給出了邏輯的股價(jià),而邏輯的組成是一些相應(yīng)的抽象操作,它們都推遲到子類中去實(shí)現(xiàn)
  public void TemplateMethod()
{
  PrimitiveOperation1();
  PrimitiveOperation2();
  Console.WriteLine("");
}
}
  • ConcreteClass 實(shí)現(xiàn)父類所定義的一個(gè)或多個(gè)抽象方法。每一個(gè) AbstractClass 都可以有多個(gè) ConcreteClass 與之對(duì)應(yīng),而每一個(gè) ConcreteClass 都可以給出這些抽象方法的不同實(shí)現(xiàn),從而使得頂級(jí)邏輯的實(shí)現(xiàn)各不相同。
class ConcreteClassA: AbstractClass
{
    public override void PrimitiveOperation1()
    {
        Console.WriteLine("A 方法1實(shí)現(xiàn)");
    }
    public override void PrimitiveOperation2()
    {
        Console.WriteLine("A 方法2實(shí)現(xiàn)");
    }
}
class ConcreteClassB: AbstractClass
{
    public override void PrimitiveOperation1()
    {
        Console.WriteLine("B 方法1實(shí)現(xiàn)");
    }
    public override void PrimitiveOperation2()
    {
        Console.WriteLine("B 方法2實(shí)現(xiàn)");
    }
}

二、模板方法模式的特點(diǎn)

是通過把不變的行為放到抽象類中,取出子類中的重復(fù)代碼來體現(xiàn)它的優(yōu)勢(shì)。


三、舉例

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";
        }
    }
  //調(diào)用
    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 ();
        }
    }
}

+結(jié)果:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. 概述 定義一個(gè)操作中的算法的骨架,而將步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義算...
    時(shí)待吾閱讀 362評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,881評(píng)論 18 139
  • 1. [C#語言基礎(chǔ)]請(qǐng)簡(jiǎn)述拆箱和裝箱。 答: 裝箱操作: 值類型隱式轉(zhuǎn)換為object類型或由此值類型實(shí)現(xiàn)的任何...
    胤醚貔貅閱讀 4,880評(píng)論 1 29
  • 1. 定義 模板方法模式是類的行為模式。準(zhǔn)備一個(gè)抽象類,將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實(shí)現(xiàn),然后聲明一...
    SyncAny閱讀 287評(píng)論 0 0
  • 目錄本次給大家介紹的是我收集以及自己個(gè)人保存一些.NET面試題第二篇簡(jiǎn)介1.接口2.您在什么情況下會(huì)用到虛方法或抽...
    寒劍飄零閱讀 1,995評(píng)論 0 10