基于策略的泛型资源管理器-初步思考
2006-07-03 01:54
197 查看
资源管理器的作用在游戏开发和其它应用里是非常有用的。
设计资源管理应该做到通用。一般做法是采用单根继承的资源对象。就是所有的对象都需要从单根派生。这样的做法不是特别灵活(好处是做成动态连接库的时需要注意的东西比较少)。
所以我比较喜欢的是使用模板。模板唯一的缺点就是做动态库比较恶心(这个恐怕只有做过的人才能体会。),但是基于基于模板的管理器类处理各种需要变化的算法比较麻烦。比如,各种调度算法,不同的资源需要有不同的方式去创建。前面发布过一个资源管理器。http://blog.csdn.net/Nhsoft/archive/2005/11/19/532884.aspx 并没有很好解决这个问题了。
处理这个问题比较好的方案是把各种策略做成一个个模板参数。方法如下:
template <typename ResType> class TSimpleResCreator
{
public:
ResType* newInstance()
{
return ResType::newInstance();//ResType;
}
void deleteInstance(ResType* pRes)
{
ResType::deleteInstance(pRes);
}
};
template <typename ResType , typename _TCreator = TSimpleResCreator<ResType> >
class TBaseResMgr : public _TCreator , public IResManager
{
}
这里使用了一个创建策略。这样的话可以采用不同的创建策略,比如纹理和文件的创建方法显然是不一样的。
接下来的工作,要把其它的策略分开。比如资源淘汰算法。。。。。
设计资源管理应该做到通用。一般做法是采用单根继承的资源对象。就是所有的对象都需要从单根派生。这样的做法不是特别灵活(好处是做成动态连接库的时需要注意的东西比较少)。
所以我比较喜欢的是使用模板。模板唯一的缺点就是做动态库比较恶心(这个恐怕只有做过的人才能体会。),但是基于基于模板的管理器类处理各种需要变化的算法比较麻烦。比如,各种调度算法,不同的资源需要有不同的方式去创建。前面发布过一个资源管理器。http://blog.csdn.net/Nhsoft/archive/2005/11/19/532884.aspx 并没有很好解决这个问题了。
处理这个问题比较好的方案是把各种策略做成一个个模板参数。方法如下:
template <typename ResType> class TSimpleResCreator
{
public:
ResType* newInstance()
{
return ResType::newInstance();//ResType;
}
void deleteInstance(ResType* pRes)
{
ResType::deleteInstance(pRes);
}
};
template <typename ResType , typename _TCreator = TSimpleResCreator<ResType> >
class TBaseResMgr : public _TCreator , public IResManager
{
}
这里使用了一个创建策略。这样的话可以采用不同的创建策略,比如纹理和文件的创建方法显然是不一样的。
接下来的工作,要把其它的策略分开。比如资源淘汰算法。。。。。
相关文章推荐
- Java程序员的日常—— 基于类的策略模式、List<?>与List、泛型编译警告、同比和环比
- 基于http协议通信的APP安全策略的一点思考
- 策略建模--基于机器学习 学习笔记
- 策略模式的思考
- Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)
- 推荐系统思考小结(基于Mahout)
- 基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
- 权限设计学习篇--BlueDavy之技术Blog - 漫谈权限系统之技术策略以及基于RBAC ...
- quick-cocos2d-x基于源码加密打包功能的更新策略(1)
- 基于管道共享的流控策略(3)
- 基于ElementUI的网站换主题的一些思考与实现
- 基于annotation的hibernate主键生成策略(转)
- 基于策略的通用资源池
- VB.NET接口泛型+策略模式+单例模式
- 基于stm32f103zet6之UC/OS_II的学习1(初步移植OS--点灯大法)
- [置顶] 基于stm32f103zet6之UC/OS_II的学习1(初步移植OS--点灯大法)
- 转:基于NHibernate的三层结构应用程序开发初步
- 彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
- 彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
- Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】