模板方法模式:
定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。
结构图:
代码例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 模板模式
{
abstract class AbstractClass
{
public abstract void PriOper1(); //抽象行为,放到子类里边去实现
public abstract void priOper2();
public void Templatemethod() //模板方法,推迟到子类里边去实现
{
PriOper1();
priOper2();
Console.WriteLine("");
}
}
class ConcreteClassA : AbstractClass
{
public override void PriOper1()
{
Console.WriteLine("具体类A的方法1 实现");
}
public override void priOper2()
{
Console.WriteLine("具体类A的方法2 实现");
}
}
class Program
{
static void Main(string[] args)
{
AbstractClass c;
c = new ConcreteClassA();
c.Templatemethod();
Console.ReadKey();
}
}
}
总结:
模板方法是通过把不变行为搬到超类上,去除子类中重复的代码来体现它的优势,当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们通过模板方法模式把这些行为搬到单一的地方,这样就帮助子类摆脱重复不变的行为纠缠。