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.模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章