目录
概述
模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将算法的具体实现延迟到子类中。模板方法模式可以使得算法的实现更加灵活,同时又不破坏算法的整体结构。
模板方法模式通常包含两个角色:抽象类和具体类。抽象类定义了一个算法的骨架,包含一些抽象方法和具体方法。具体类继承抽象类,并实现抽象方法,从而完成算法的具体实现。
优点
模板方法模式的优点在于它将算法的骨架和具体实现分离开来,使得算法的实现更加灵活和可扩展。此外,模板方法模式还可以提高系统的可维护性和可扩展性,因为它将算法的骨架和具体实现分离开来,从而使得算法的修改和扩展更加容易。
缺点
模板方法模式的缺点在于它可能会导致代码的复杂度增加,因为它需要引入多个抽象方法和具体方法来实现算法的骨架和具体实现。此外,模板方法模式还可能会降低系统的性能和效率,因为它需要在运行时动态绑定抽象方法和具体方法。
UML类图
下面是模板方法模式的UML类图:
在UML类图中,AbstractClass是抽象类,定义了一个算法的骨架,在TemplateMethod方法中调用了一些具体方法。ConcreteClassA和ConcreteClassB是具体类,它们继承了AbstractClass,并实现了抽象方法,从而完成了算法的具体实现。客户端通过创建具体类的对象,并调用它们的TemplateMethod方法来触发算法的执行。
示例代码
下面是模板方法模式的示例代码:
// 抽象类
public abstract class AbstractClass
{
public void TemplateMethod()
{
Operation1();
Operation2();
Operation3();
}
protected virtual void Operation1()
{
Console.WriteLine("AbstractClass.Operation1");
}
protected virtual void Operation2()
{
Console.WriteLine("AbstractClass.Operation2");
}
protected virtual void Operation3()
{
Console.WriteLine("AbstractClass.Operation3");
}
}
// 具体类A
public class ConcreteClassA : AbstractClass
{
protected override void Operation1()
{
Console.WriteLine("ConcreteClassA.Operation1");
}
protected override void Operation2()
{
Console.WriteLine("ConcreteClassA.Operation2");
}
}
// 具体类B
public class ConcreteClassB : AbstractClass
{
protected override void Operation2()
{
Console.WriteLine("ConcreteClassB.Operation2");
}
protected override void Operation3()
{
Console.WriteLine("ConcreteClassB.Operation3");
}
}
// 客户端
public class Client
{
static void Main()
{
AbstractClass objA = new ConcreteClassA();
objA.TemplateMethod();
AbstractClass objB = new ConcreteClassB();
objB.TemplateMethod();
}
}
在上面的示例代码中,AbstractClass是抽象类,定义了一个算法的骨架,在TemplateMethod方法中调用了一些具体方法。ConcreteClassA和ConcreteClassB是具体类,它们继承了AbstractClass,并实现了抽象方法,从而完成了算法的具体实现。
在客户端中,首先创建了一个ConcreteClassA对象,并调用了它的TemplateMethod方法,从而触发了算法的执行。然后创建了一个ConcreteClassB对象,并调用了它的TemplateMethod方法,从而触发了另一种算法的执行。