创建型模式中的原型模式中的克隆分为浅复制和深复制。那么行为型模式中的模版方法模式又是什么呢?
定义:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
我们就用书上的这个例子来说明一下。
结构图:
代码:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("学生甲抄的试卷: ");
TestPaper studentA = new TestPaperA();
studentA.TestQuestion1();
Console.WriteLine("学生乙抄的试卷: ");
TestPaper studentB = new TestPaperB();
studentB.TestQuestion1();
Console.Read();
}
}
class TestPaper
{
public void TestQuestion1()
{
Console.WriteLine("倚天剑和屠龙刀的材质是 a 球磨铸铁 b 马口铁 c 高速合金钢 d 纤维");
Console.WriteLine("答案:b");
}
protected virtual string Answer1()
{
return "";
}
}
class TestPaperA : TestPaper
{
protected override string Answer1()
{
return "b";
}
}
class TestPaperB : TestPaper
{
protected override string Answer1()
{
return "c";
}
}
虚方法(virtual)
在这里的代码中,有virtual方法。为什么要把它设置成为虚方法呢?
因为我们在共同的父类中,这个方法具体实现什么功能,我们并不能现在就确定,这只能让我们的子类在继承中实现。因为这个子类可以继承他并且实现他,其他子类也可以做这样的事情,所以很多类都要有这个功能。但是具体的实现细节的不同,所以我们把他放在一个共同的基类中,让我们的子类来继承实现,具体的不同就是子类来实现他的操作。
在上面的例子中,他是可以被重写的,也就是说这个方法具有多态父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑。但是这里强调,不是必须要重写的,子类可以使用base方法的方式调用,无论有没有在子类中使用override方法重写。
当然啦,他也可以直接使用,和普通的方法一样。
模式特点:
模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码,这样可以使代码看起来更加的简单,同时也有利于以后的修改和拓展。