GoF中定义:
“在一个操作方法中定义算法的流程,其中某些步骤由子类完成。
模板方法模式让子类在不变更原有算法流程的情况下,还能够重新定义其中的步骤”
每一次武器攻击目标时,都要按逻辑执行:
1.开火、枪口特效
2.子弹特效
3.武器特效
4.通知敌方被击中
而每一种武器(如:枪,炮)都要执行一遍相同顺序的逻辑
模板方法模式就是着手解决这个问题的
1.定义一个算法的流程,即是很明确地定义算法的每一个步骤,并写在父类的方法中,而每一个步骤都可以是一个方法的调用
2.某些步骤由子类完成,不同子类的特性计算在此实现
//TemplateMethod.cs
public abstract class AbstractClass {
public void TemplateMethod() {
PrimitiveOperation1();
PrimitiveOperation2();
}
protected abstract void PrimitiveOperation1();
protected abstract void PrimitiveOperation2();
} public class ConcreteClassA : AbstractClass {
protected override void PrimitiveOperation1()
{
Debug.Log("ConcreteClassA.PrimitiveOperation1");
}
protected override void PrimitiveOperation2()
{
Debug.Log("ConcreteClassA.PrimitiveOperation2");
}
} public class ConcreteClassB : AbstractClass
{
protected override void PrimitiveOperation1()
{
Debug.Log("ConcreteClassB.PrimitiveOperation1");
}
protected override void PrimitiveOperation2()
{
Debug.Log("ConcreteClassB.PrimitiveOperation2");
}
}
//TemplateMethodTest.CS
void UnitTest() {
AbstractClass theClass = new ConcreteClassA();
theClass.TemplateMethod(); theClass = new ConcreteClassB();
theClass.TemplateMethod();
}
//测试结果
ConcreteClassA.PrimitiveOperation1
ConcreteClassA.PrimitiveOperation2
ConcreteClassB.PrimitiveOperation1
ConcreteClassB.PrimitiveOperation2
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著