设计模式系列(十二)模板方法模式(Template Method Pattern)

本文深入探讨设计模式中的模板方法模式,通过UML类图展示其结构,并以C++为例,阐述其实现细节和使用场景,揭示其在软件设计中的重要价值。
摘要由CSDN通过智能技术生成

设计模式系列(十二)模板方法模式(Template Method Pattern)


    模板方法模式是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    在最开始先来说一个和模板方法模式关系比较紧密的原则:“好莱坞原则”,即别调用我们,我们会调用你。形象的来说就是,别打电话给我,在我需要你的时候会打电话给你。

    举个例子来说,通常打电话的过程都是一样的:拨号---呼叫---等待接听---通话---通话结束,这个过程我们就可以定义成一个算法骨架,这个算法骨架由基类来实现,然后在保持这个骨架不变的情况下,子类可以实现算法中的某些步骤,比如说怎么拨号,怎么接听,不同的手机方式也有些不一样,然后不同的手机就定义了不同的具体算法,但是算法骨架还是一样的,只是实现形式不一样而已。所以,可以看出来模板方法模式就是在基类中定义一个方法(C/C++中一般称为函数),然后这个方法中调用了整个算法流程的所有函数,但是这些函数并不一定都在基类中实现了,有些方法定义成抽象的,由子类来实现,有些方法只定义默认的实现,由子类挂钩实现,然后不同的子类相当于实现了不同的具体方法,但是算法骨架还是一样的。

    模板方法模式中主要的角色有:

(1)抽象角色(AbstractClass):抽象角色一般是一个抽象类,该类中可以定义很多方法,可以是具体的或者抽象的,在该类中最重要的就是“模板方法”,在C/C++中可以称之为一个模板函数,这个函数负责调用所有算法流程中的函数,构成一个算法框架,但是其中调用的函数有些可能是延迟到子类才实现;

(2)具体角色(ConcreteClass):具体角色是具体类,继承自抽象角色,实现了抽象角色中的抽象方法,构成一个完整的算法,相当于把算法框架中空缺的部分填充进去,所以可以有很多很多的具体角色,都继承自抽象角色,从而形成不同的算法。

    模板方法模式的实现中,抽象角色里面通常有两大类的方法:

(1)模板方法:这个方法就是用来调用其他的方法从而形成算法的框架,所以这个方法是核心;

(2)基本方法:一般包括三种基本方法,即抽象方法、具体方法和钩子方法。

    第一,抽象方法就是一个只提供声明的方法,
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值