【35】考虑virtual方法以外的其他选择
2024-08-25 19:41:59
1、使用Non-Virtual Interface 实现方法模版
将虚方法声明为private,子类重写private的虚方法,在父类中通过public方法调用虚方法。NVI的优点是:可以在虚方法之前和之后做一些事情。
2、使用方法指针实现策略模式
在类中关联一个方法指针,方法指针的形参是类对象的引用。实例化一个对象的时候,把一个方法传递给对象,这就意味着每个对象都有一个方法。这种方式提供了一些有趣的弹性:a、同一类型的不同对象可以有不同的计算方法;b、在运行期可以更改对象的计算方法。这种方式的缺点是:计算方法不能访问protected成员,要解决这个问题,只能弱化类的封装。
3、使用tr1::function 实现策略模式
可以认为function对方法指针进行了优化,function是泛型的方法指针,function可以指向functor,可以指向成员方法,可以指向兼容于function的方法。
4、古典的策略模式
类型建立一个继承结构,functor建立一个继承结构。
最新文章
- Atitit 多继承实现解决方案 java c#
- LinkedHashMap及其源码分析
- SQL常见错误及处理方法
- Print all nodes at distance k from a given node
- Rails,uva 514
- spring日记------部署环境、写demo
- 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)
- [转]Android在初始化时弹出popwindow的方法 .
- 练习SignalR使用
- c++子类和父类成员函数重名
- HQL连接查询和注解
- 【BZOJ1305】跳舞(网络流)
- js 判断元素(例如div)里的数据显示不全(数据长度大于元素长度)
- vue关于为空使用默认值
- TestNG源代码分析:依赖管理的实现
- 用css写出下拉框(代码转自wq群)
- MySQL--修改普通表为自增表
- Linux gprof命令
- [转]Shared——探究react-native通信机制
- Deepin Linux安装MySQL方法