c#设计模式-行为性模式-4.模板方法模式

Posted mr.chenyuelin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#设计模式-行为性模式-4.模板方法模式相关的知识,希望对你有一定的参考价值。

提到模板我们经常会想到简历模板/PPT模板等,以简历模板为例,不同的人可以使用一样的简历模板,在填充内容时根据自己的名字/工作经历等填写自己的内容,从而形成不同的简历。在OO中模板方法模式和现实中的模板十分相似,首先要有一个封装了不可变部分的抽象类(简历的大致结构,都有姓名、性别、年龄、工作经历等),然后将可变部分延迟到子类中(不同人的简历内容不同,这些不同的内容放在子类中实现),模板方法就是多态的一种实现。抽象类中模板方法不仅仅可以定义内容的,也可以定义执行的顺序。

以游戏厅打游戏为例,我们去游戏厅不管玩什么游戏都可以归结为四步:先投币,游戏初始化,玩游戏,游戏结束。这四步的顺序是不变的,其中第一步是不能改变的,无论我们玩什么游戏都要先投币

简单记忆:把不可变的放父类,可变的在子类实现

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

namespace 模板方法模式
{
    public abstract class Game
    {
        //每款游戏都要投币,所以子类不可以重写
        public void InsertCoins()
        {
            Console.WriteLine("开始投币");
        }
        public abstract void InitGame();
        public abstract void StartGame();
        public abstract void EndGame();
        public void Play()
        {
            //可以自己选择函数调用顺序
            InsertCoins();
            InitGame();
            StartGame();
            EndGame();
        }
    }

    public class KLKDGame : Game
    {
        public override void EndGame()
        {
            Console.WriteLine("初始化恐龙快打游戏");
        }

        public override void InitGame()
        {
            Console.WriteLine("开始恐龙快打游戏");
        }

        public override void StartGame()
        {
            Console.WriteLine("结束恐龙快打游戏");
        }
    }
    public class SGWSGame : Game
    {
        public override void EndGame()
        {
            Console.WriteLine("初始化三国无双游戏");
        }

        public override void InitGame()
        {
            Console.WriteLine("开始三国无双游戏");
        }

        public override void StartGame()
        {
            Console.WriteLine("结束三国无双游戏");
        }
    }
    //客户端调用
    class Program
    {
        static void Main(string[] args)
        {
            Game kikdGame = new KLKDGame();
            kikdGame.Play();
            Game sgwsGame = new SGWSGame();
            sgwsGame.Play();
            Console.ReadKey();
        }
    }
}

开始投币
开始恐龙快打游戏
结束恐龙快打游戏
初始化恐龙快打游戏
开始投币
开始三国无双游戏
结束三国无双游戏
初始化三国无双游戏

以上是关于c#设计模式-行为性模式-4.模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 行为型模式 -- 模板方法模式(定义示例JDK源码解析 InputStream)

行为型设计模式之模板方法模式

设计模式行为型模式。

设计模式行为型模式。

设计模式行为型模式。

浅析设计模式4——模板方法模式