C++主题——Template Method(模板方法)模式

 C++主题——Template Method(模板方法)模式

        现在正在做一个差分系统,大概意思就是把服务器上的代码作为备份,程序员从服务器上下来修改了这些代码,然后在提交的时候,判断哪些被修改了,哪些没有,记录下修改的部分,然后准备覆盖修改的部分。由于我们三个人都没接触过mfc,所以宋老师对我们的要求不高,只完成基本的功能就好了。做的时候遇到了这样的问题:我们修改的时候可能会增加文件,增加文件夹,修改文件,在对他们做记录的时候,要有不同的方法,但是会有相同的步骤,想了半天突然想到template method。把记录抽象出来,作为一个抽象类record,定义一个记录方法writerecord,在这个方法中定义一系列的步骤step1、step2...,这些步骤以纯虚函数形式体现在record类中,然后三中情况分别派生自record成为DifFileRecord、MoreFileRecord、MoreFolderRecord,这三个派生类就接受了这个算法的框架,然后分别实现这三个算法的实质。这就是模板模式的基本思路。

       template method模式提供了非虚函数(覆盖或保留)和虚函数(自己更改)两种不同类型函数的一种折中,在基类中实现一个共有的非虚拟函数,由它调用protected的虚函数。派生类保留了基类的非虚函数,按照要求完成了虚函数的实现,通过重写这些虚拟函数,以有限的方式来限定其自身行为,行为是不同的,但是步骤是相同的。基本思想就是这样:定义一个操作的算法骨架,而将实现步骤延迟到子类中,这样做使得子类并不可以改变一个算法的结构,而只是规定自己实现时的不同的部分。抽象类的作用就是捕获共同点,而派生类封装不同点。

       就像虚竹和韦小宝都当过和尚,让他们参禅,虚竹可能正襟危坐,然后心里想的是经书,最后报告给老和尚心得体会;韦小宝可能歪歪斜斜坐在那,然后心里想的是十八摸,最后编个谎话告诉老和尚。同样的三个步骤,坐->想->说,就可以抽象出一个和尚类,做出一个参禅的动作,然后做出三个参禅的基本过程坐、想、说。派生出虚竹类和韦小宝类,分别实现坐、想、说,虽然他们的过程一摸一样,可是他们的实现千差万别。这就是template method模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值