一、NVI手法实现模版方法模式
(1)NVI手法的基本思想
该设计是令客户通过public non-virtual成员函数间接调用private virtual函数,称为non-virtual interface(NVI)手法,它是模板方法设计模式的一个独特表示;相当对virtual函数进行一层的包装,可以称为是virtual函数的外覆器(warpper).
注:模板方法设计模式,主要思想是基类提供抽象接口,具体细节让派生类实现,具体参考另一篇博客http://blog.csdn.net/zhangchen1003/article/details/48445553
(2)具体实现
class Base{
public:
void dosomething(){
print();
}
private:
virtual void print()=0;
};
class D1:public Base{
private:
void print(){
cout<<"D1"<<endl;
}
};
class D2:public Base{
private:
void print(){
cout<<"D2"<<endl;
}
};
int main(){
Base* p=new D1;
p->dosomething();
delete p;
Base* p2=new D2;
p2->dosomething();
delete p2;
return 0;
}
上述代码中,让基类的成员函数去调用私有的纯虚函数,而纯虚函数的具体实现则让派生类去具体定义;
但是这种方法本质上和virtual实现多态的方法没有什么不同,最后还是通过virtual实现的,只不过多了一层外面的修饰而已;
未完待续