定义一个操作中的算法骨架,将某些步骤延迟到子类中实现,使得子类可在不改变算法结构的前提下重定义某些步骤。
主要组成:
AbstractClass-抽象父类,实现模板方法,定义算法的骨架。
ConcreteClass-具体子类,重定义模板方法中的某些特定步骤。
策略与模板方法区别:
- 策略使用委托调用其他类来改变算法。
- 模板方法使用继承来改变算法的实现。
相关类:
using System;
namespace TemplateMethod
{
/// <summary>
/// 播放器(抽象父类)
/// </summary>
abstract class AbstractPlayer
{
//模板方法
public void PlayVideo()
{
OpenPlayer();
Play();
ClosePlayer();
}
protected void OpenPlayer()
{
Console.WriteLine("打开播放器");
}
public abstract void Play();
protected void ClosePlayer()
{
Console.WriteLine("关闭播放器");
}
}
/// <summary>
/// 优酷播放器(具体子类)
/// </summary>
class YoukuPlayer : AbstractPlayer
{
public override void Play()
{
Console.WriteLine("正在使用优酷播放器播放视频...");
}
}
/// <summary>
/// 腾讯播放器(具体子类)
/// </summary>
class TencentPlayer : AbstractPlayer
{
public override void Play()
{
Console.WriteLine("正在使用腾讯播放器播放视频...");
}
}
}
调用:
using System;
namespace TemplateMethod
{
class Program
{
static void Main(string[] args)
{
YoukuPlayer youkuPlayer = new YoukuPlayer();
youkuPlayer.PlayVideo();
Console.WriteLine("*********");
TencentPlayer tencentPlayer = new TencentPlayer();
tencentPlayer.PlayVideo();
Console.Read();
}
}
}
结果:
参考资料:《设计模式-可复用面对对象软件的基础》