三、模板方法模式的示意性代碼
// Template Method pattern -- Structural example
using System;
// "AbstractClass"
abstract class AbstractClass
{
// Methods
abstract public void PrimitiveOperation1();
abstract public void PrimitiveOperation2();
// The Template method
public void TemplateMethod()
{
Console.WriteLine("In AbstractClass.TemplateMethod()");
PrimitiveOperation1();
PrimitiveOperation2();
}
}
// "ConcreteClass"
class ConcreteClass : AbstractClass
{
// Methods
public override void PrimitiveOperation1()
{
Console.WriteLine("Called ConcreteClass.PrimitiveOperation1()");
}
public override void PrimitiveOperation2()
{
Console.WriteLine("Called ConcreteClass.PrimitiveOperation2()");
}
}
/**//// <summary>
/// ClIEnt test
/// </summary>
public class ClIEnt
{
public static void Main( string[] args )
{
// Create instance and call template method
ConcreteClass c = new ConcreteClass();
c.TemplateMethod();
}
}
四、繼承作為復用的工具
使用繼承作為復用的手段必須慎重,C#語言的設計師對使用繼承作為復用的工具有著不同層次上的認識。
不知其一
首先,初學C#的程序員可能不知道什麼是繼承,或者認為"繼承"是高深的工具。那時候,大部分的功能復用都是通過委派進行的。
知其一、不知其二
然後慢慢地,他們發現在C#語言裡實現繼承並不困難,並且初步認識到繼承可以使子類一下子得到基類的行為。這時他們就會躍躍欲試了,試圖使用繼承作為功能復用的主要工具,並把原來應當使用委派的地方,改為使用繼承,這時繼承就有被濫用的危險。