原因:如果使用了继承,并且确定了这个继承是有意义的。那么这个继承中的基类就应该是子类的模板。将所有重复的代码都应该放在基类,而不是让每一个子类都去重复。
作用:定义一个操作中的算法骨架,将一些步骤延迟到子类中去。模板方法可以使得子类可以在不改变一个算法的结构的情况下重新定义一些算法的特定步骤。
public abstract class BaseClass
{
protected BaseClass(string name)
{
this.Name = name;
}
public string Name { get; set; }
protected abstract void MethodA();
protected abstract void MethodB();
public void Method()
{
MethodA();
MethodB();
Console.WriteLine("I am {0} class", this.Name);
}
}
public class ChildClass1 : BaseClass
{
public ChildClass1(string name) : base(name)
{
}
protected override void MethodA()
{
Console.WriteLine("This is class1's MethodA");
}
protected override void MethodB()
{
Console.WriteLine("This is class1's MethodB");
}
}
public class ChildClass2 : BaseClass
{
public ChildClass2(string name) : base(name)
{
}
protected override void MethodA()
{
Console.WriteLine("This is class2's MethodA");
}
protected override void MethodB()
{
Console.WriteLine("This is class2's MethodB");
}
}
客户端代码:
static void Main(string[] args)
{
ChildClass1 childClass1 = new ChildClass1("childClass1");
ChildClass2 childClass2 = new ChildClass2("childClass2");
childClass1.Method();
childClass2.Method();
}
说明:模板方法模式提供了一个很好的代码重用平台。当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。应该把不变的部分放在基类中出现。
阅读(1592) | 评论(0) | 转发(0) |