6.模板模式

原理:

在模板模式(Template Pattern)中,一個(gè)抽象類(lèi)公開(kāi)定義了執(zhí)行它的方法的方式/模板。它的子類(lèi)可以按需要重寫(xiě)方法實(shí)現(xiàn),但調(diào)用將以抽象類(lèi)中定義的方式進(jìn)行。這種類(lèi)型的設(shè)計(jì)模式屬于行為型模式。

意圖:

定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類(lèi)中。模板方法使得子類(lèi)可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

主要解決:

一些方法通用,卻在每一個(gè)子類(lèi)都重新寫(xiě)了這一方法。

應(yīng)用實(shí)例:

1、在造房子的時(shí)候,地基、走線(xiàn)、水管都一樣,只有在建筑的后期才有加壁櫥加?xùn)艡诘炔町悺?2、西游記里面菩薩定好的 81 難,這就是一個(gè)頂層的邏輯骨架。

代碼

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 模板方法模式
{
    class Program
    {
        static void Main(string[] args)
        {
            AbstractClass c;
            c = new ConcreteClassA();
            c.TemplateMethod();
            c = new ConcreteClassB();
            c.TemplateMethod();

            Console.ReadKey();
        }
    }
}

Template.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 模板方法模式
{
    abstract class AbstractClass
    {
        //一些抽象行為放到子類(lèi)去實(shí)現(xiàn)
        public abstract void PrimitiveOperation1();
        public abstract void PrimitiveOperation2();

        //模板方法,給出了邏輯的骨架,而邏輯的組成是一些相應(yīng)的抽象操作,他們都推遲到子類(lèi)實(shí)現(xiàn)
        public void TemplateMethod()
        {
            PrimitiveOperation1();
            PrimitiveOperation2();
            Console.WriteLine("");
        }
    }

    class ConcreteClassA : AbstractClass
    {
        public override void PrimitiveOperation1()
        {
            Console.WriteLine("具體類(lèi)A方法1實(shí)現(xiàn)");
        }
        public override void PrimitiveOperation2()
        {
            Console.WriteLine("具體類(lèi)A方法2實(shí)現(xiàn)");
        }
    }
    class ConcreteClassB : AbstractClass
    {
        public override void PrimitiveOperation1()
        {
            Console.WriteLine("具體類(lèi)B方法1實(shí)現(xiàn)");
        }
        public override void PrimitiveOperation2()
        {
            Console.WriteLine("具體類(lèi)B方法2實(shí)現(xiàn)");
        }
    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式系列文章 《iOS設(shè)計(jì)模式(1)簡(jiǎn)單工廠模式》《iOS設(shè)計(jì)模式(2)工廠模式》《iOS設(shè)計(jì)模式(3)適配器...
    leehoo閱讀 4,337評(píng)論 1 24
  • 設(shè)計(jì)模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時(shí)需要注意以下幾點(diǎn):a) 高內(nèi)聚、低耦合和單一職能的“沖突”實(shí)際上,這兩者...
    彥幀閱讀 3,895評(píng)論 0 14
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,281評(píng)論 25 708
  • 設(shè)計(jì)模式基本原則 開(kāi)放-封閉原則(OCP),是說(shuō)軟件實(shí)體(類(lèi)、模塊、函數(shù)等等)應(yīng)該可以拓展,但是不可修改。開(kāi)-閉原...
    西山薄涼閱讀 4,086評(píng)論 3 14
  • 蘑菇街的方案: 蘑菇街組件化的技術(shù)方案對(duì)應(yīng)的demo 上面的反駁 Casa提出了不同意見(jiàn),下半部分是下面蘑菇街修改...
    莊msia閱讀 671評(píng)論 0 1

友情鏈接更多精彩內(nèi)容