模板模式

来源:

http://www.tnove.com/?p=59

之前学过软件设计模式,但没有在工程中用过,所以基本学过的都快忘光了。这几天看到模板模式,网上搜了下主要是介绍Java 的,

所以我也来记录下C++下面我对模板模式的理解

当你实现一个算法的时候,通常不希望将实现信息暴露给外部和给外部使用,包括将会被继承的类。

但是,算法有要有扩充性,可以针对不同的信息实现不同的结果。怎么办?私有的虚函数:

这个函数只有我可以使用,但是却能够迟后决定调用的具体函数。从而在封装上和扩展性能上都有比较好的性能

 

base 类中定义了一个私有的纯虚函数,一般来讲虚函数应该定义为共有或保护类型较多,这样子类才能调用。当定义为私有时,只能基类自己调用(主要供基类的公有成员函数调用)。

这样做是为了达到某种设计目的,不想子类碰该函数。

 

类如上面,不同的子类继承base后需要实现base的纯虚函数fun();而实现过程会不一样。

这样,子类可以通过调用基类的公有do()函数去调用自身实现的fun()函数,实际上这样是没有多大实际意义的。因为子类可以直接调用自己的fun()。

还有一种情况是,当公有继承base类时,外界可以通过调用base的do()函数,从而连环的调用对应的fun()函数,而do()函数据体会调用哪个子类定义的fun(),则更具实际

情况决定(多态)

 

这样的基类定义使用在如下情况:

在定义基类时,不能明确知道自己将要干什么,或继承自己的子类将要干什么

为子类留下灵活的接口方便其实现自己的方法。

 

将fun()定义成私有是为了其子类不能访问,达到一定封装目的。当然可以不用定义为私有(大多情况纯虚函数为公有,为外部提供调用),此处也可以为普通虚函数。

 

此处 base可以叫做模板类,而fun()可以称为模板方法,应为在base的基础上可以定义一系列子类实现不同的fun()功能。

 

另外此处纯虚函数 私有依然是多态的,类成员函数访问类型与其是否能override没有直接关系。

 

关于纯虚函数的几点:

1。纯虚函数是可以有缺省实现的(也可以没有),但是虚函数必须要有缺省实现,纯虚函数的实现要在类外部写,inline是不可以的。

2。私有的虚函数依然多态性


3。纯虚函数在派生类中不一定非要实现,只要不实例化就可以了。

 

上面就是一种模板模式的实现方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值