概念:
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
意图:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
主要解决:
一些方法通用,却在每一个子类都重新写了这一方法。
优点:
- 封装不变部分,扩展可变部分。
- 提取公共代码,便于维护。
- 行为由父类控制,子类实现。
缺点:
- 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
实现类图
模式的结构
1)抽象类/抽象模板(Abstract Class)
public abstract class 游戏模式初始化
{
public abstract void initializeMap();
public abstract void initializeCha();
public abstract void initializePlay();
public void 游戏初始化()
{
//初始化地图
initializeMap();
//初始化人物
initializeCha();
//初始化玩法
initializePlay();
}
}
2)具体子类/具体实现(Concrete Class)
using System;
public class _2D模式 : 游戏模式初始化
{
public override void initializeCha()
{
Console.WriteLine("2D模式人物初始化。。。。。");
}
public override void initializeMap()
{
Console.WriteLine("2D模式地图初始化。。。。。");
}
public override void initializePlay()
{
Console.WriteLine("2D模式玩法初始化。。。。。");
}
}
using System;
public class _3D模式 : 游戏模式初始化
{
public override void initializeCha()
{
Console.WriteLine("3D模式人物初始化。。。。。");
}
public override void initializeMap()
{
Console.WriteLine("3D模式地图初始化。。。。。");
}
public override void initializePlay()
{
Console.WriteLine("3D模式玩法初始化。。。。。");
}
}
测试
using System;
class Program
{
static void Main(string[] args)
{
游戏模式初始化 m = new _2D模式();
m.游戏初始化();
Console.WriteLine("更换模式");
m = new _3D模式();
m.游戏初始化();
Console.Read();
}
}
输出示例:
设计模式------首页