指的是“Template Method”模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Te m p l a t e M e t h o d 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 class Algorithm { public void DoAlgorithm() { Console.WriteLine("In DoAlgorithm");
// do some part of the algorithm here
// step1 goes here Console.WriteLine("In Algorithm - DoAlgoStep1"); // . . . // step 2 goes here Console.WriteLine("In Algorithm - DoAlgoStep2"); // . . . // Now call configurable/replacable part DoAlgoStep3(); // step 4 goes here Console.WriteLine("In Algorithm - DoAlgoStep4"); // . . . // Now call next configurable part DoAlgoStep5(); } abstract public void DoAlgoStep3() { Console.WriteLine("In Algorithm - DoAlgoStep3"); } abstract public void DoAlgoStep5() { Console.WriteLine("In Algorithm - DoAlgoStep5"); } }class CustomAlgorithm : Algorithm { public void DoAlgoStep3() { Console.WriteLine("In CustomAlgorithm - DoAlgoStep3"); } public void DoAlgoStep5() { Console.WriteLine("In CustomAlgorithm - DoAlgoStep5"); } }/// <summary> /// Summary description for Client. /// </summary> public class Client { public static int Main(string[] args) { CustomAlgorithm c = new CustomAlgorithm(); c.DoAlgorithm(); return 0; } }
class Algorithm
{
public void DoAlgorithm()
{
Console.WriteLine("In DoAlgorithm");
// do some part of the algorithm here
// step1 goes here
Console.WriteLine("In Algorithm - DoAlgoStep1");
// . . . // step 2 goes here
Console.WriteLine("In Algorithm - DoAlgoStep2");
// . . . // Now call configurable/replacable part
DoAlgoStep3(); // step 4 goes here
Console.WriteLine("In Algorithm - DoAlgoStep4");
// . . . // Now call next configurable part
DoAlgoStep5();
} abstract public void DoAlgoStep3()
{
Console.WriteLine("In Algorithm - DoAlgoStep3");
} abstract public void DoAlgoStep5()
{
Console.WriteLine("In Algorithm - DoAlgoStep5");
}
}class CustomAlgorithm : Algorithm
{
public void DoAlgoStep3()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep3");
} public void DoAlgoStep5()
{
Console.WriteLine("In CustomAlgorithm - DoAlgoStep5");
}
}/// <summary>
/// Summary description for Client.
/// </summary>
public class Client
{
public static int Main(string[] args)
{
CustomAlgorithm c = new CustomAlgorithm();
c.DoAlgorithm(); return 0;
}
}
class a{
protected abstract b();
public void f(){b();}
}让a的对象去调用子类,称为“让我调用你”吗?