设计类的成员函数的架构,在继承体系中,除了直接定义virtual函数外,还应当考虑以下几种方案:
1。由Non-Virtual Interface手法实现Template Method模式
NVI手法:令客户通过publicnon-virtual成员函数间接调用private vritual函数。这就是Template Method设计模式的一个独特表现形式。这个non-virtual函数称为virtual函数的外覆器(wrapper)。
2。有Function Pointers实现Strategy模式
类中存储的是函数指针
3。有tr1::function完成Strategy模式
类中存储的是函数对象,相比前者,好处是允许客户在计算是使用任何与函数对象相兼容的可调用物。
4。古典的Strategy模式
类存储的是策略类对象的指针。
各自优缺点:
直接的virtual和NVI手法,面向对象组织结构很明确,但是扩展性不强。
Strategy模式:扩展性强,灵活。但是将机能从成员函数移到class外部函数的缺点是,非成员函数无法访问class的non-public成员。