在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
什么时候使用:有一些通用的方法,将这些通用算法抽象出来。
优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
下面示例 演示 模板模式 的使用:
namespace 模板模式
{
internal class Program
{
static void Main(string[] args)
{
Game game = new LOL();
game.Play();
/*
* 控制台输出:
* LOL初始化
LOL开始游戏
LOL被关闭
*/
}
}
public abstract class Game
{
public abstract void Initialize();
public abstract void StartGame();
public abstract void Close();
//在abstract中 此方法 中不加 virtual 其 派生类 无法 重写,对应java 的final C#sealed不能在abstract中使用
//这个是模板 不能被 重写
public void Play()
{
//初始化游戏
Initialize();
//开始游戏
StartGame();
//结束游戏
Close();
}
}
public class LOL : Game
{
public override void Close()
{
Console.WriteLine("LOL被关闭");
}
public override void Initialize()
{
Console.WriteLine("LOL初始化");
}
public override void StartGame()
{
Console.WriteLine("LOL开始游戏");
}
}
public class Emblem : Game
{
public override void Close()
{
Console.WriteLine("Emblem被关闭");
}
public override void Initialize()
{
Console.WriteLine("Emblem初始化");
}
public override void StartGame()
{
Console.WriteLine("Emblem开始游戏");
}
}
}
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。