【35】考虑virtual方法以外的其他选择

1、使用Non-Virtual Interface 实现方法模版

  将虚方法声明为private,子类重写private的虚方法,在父类中通过public方法调用虚方法。NVI的优点是:可以在虚方法之前和之后做一些事情。

2、使用方法指针实现策略模式

  在类中关联一个方法指针,方法指针的形参是类对象的引用。实例化一个对象的时候,把一个方法传递给对象,这就意味着每个对象都有一个方法。这种方式提供了一些有趣的弹性:a、同一类型的不同对象可以有不同的计算方法;b、在运行期可以更改对象的计算方法。这种方式的缺点是:计算方法不能访问protected成员,要解决这个问题,只能弱化类的封装。

3、使用tr1::function 实现策略模式

  可以认为function对方法指针进行了优化,function是泛型的方法指针,function可以指向functor,可以指向成员方法,可以指向兼容于function的方法。

4、古典的策略模式

  类型建立一个继承结构,functor建立一个继承结构。

posted on 2013-12-24 19:22  Andy Niu  阅读(222)  评论(0编辑  收藏  举报