【设计模式】模板方法模式

目录

概述

优点

缺点

UML类图

示例代码


概述

        模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将算法的具体实现延迟到子类中。模板方法模式可以使得算法的实现更加灵活,同时又不破坏算法的整体结构。

        模板方法模式通常包含两个角色:抽象类和具体类。抽象类定义了一个算法的骨架,包含一些抽象方法和具体方法。具体类继承抽象类,并实现抽象方法,从而完成算法的具体实现。

优点

        模板方法模式的优点在于它将算法的骨架和具体实现分离开来,使得算法的实现更加灵活和可扩展。此外,模板方法模式还可以提高系统的可维护性和可扩展性,因为它将算法的骨架和具体实现分离开来,从而使得算法的修改和扩展更加容易。

缺点

        模板方法模式的缺点在于它可能会导致代码的复杂度增加,因为它需要引入多个抽象方法和具体方法来实现算法的骨架和具体实现。此外,模板方法模式还可能会降低系统的性能和效率,因为它需要在运行时动态绑定抽象方法和具体方法。

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方法,从而触发了另一种算法的执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值