Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

上篇文章使用SafeObjectPool实现了一个简单的Msg类。代码如下:

  1. class Msg : IPoolAble,IPoolType
  2. {
  3. #region IPoolAble 实现
  4.  
  5. public void OnRecycled()
  6. {
  7. Log.I("OnRecycled");
  8. }
  9.  
  10. public bool IsRecycled { get; set; }
  11.  
  12. #endregion
  13.  
  14.  
  15. #region IPoolType 实现
  16.  
  17. public static Msg Allocate()
  18. {
  19. return SafeObjectPool<Msg>.Instance.Allocate();
  20. }
  21.  
  22. public void Recycle2Cache()
  23. {
  24. SafeObjectPool<Msg>.Instance.Recycle(this);
  25. }
  26.  
  27. #endregion
  28. }

这个类虽然只是用来做SafeObjectExample的实例类的,但是还是有改进的空间。

在Msg的使用场景中,我们只用到了Msg类的Allocate和Recycle2Cache方法。而OnRecycled和IsRecycle这两个API用户都用不到,或者说用户用了会对Msg的管理造成风险,所以我们要想办法使用户不能访问到这两个API。

这个是可以做到的,就是把OnRecycled和IsRecycled使用接口的显示实现。

代码如下:

  1. class Msg : IPoolAble,IPoolType
  2. {
  3. #region IPoolAble 实现
  4.  
  5. void IPoolAble.OnRecycled()
  6. {
  7. Log.I("OnRecycled");
  8. }
  9.  
  10. bool IPoolAble.IsRecycled { get; set; }
  11.  
  12. #endregion
  13.  
  14.  
  15. #region IPoolType 实现
  16.  
  17. public static Msg Allocate()
  18. {
  19. return SafeObjectPool<Msg>.Instance.Allocate();
  20. }
  21.  
  22. public void Recycle2Cache()
  23. {
  24. SafeObjectPool<Msg>.Instance.Recycle(this);
  25. }
  26.  
  27. #endregion
  28. }

这样,创建出来的 Msg对象不能直接访问OnRecycled和IsRecycled这两个API了,如果硬是要访问也可以,就要将Msg对象转成IPoolAble接口就可以访问了了。

OK,今天就到这里

相关链接:

我的框架地址:https://github.com/liangxiegame/QFramework

教程源码:https://github.com/liangxiegame/QFramework/tree/master/Assets/HowToWriteUnityGameFramework/

QFramework &游戏框架搭建QQ交流群: 623597263

转载请注明地址:凉鞋的笔记http://liangxiegame.com/

微信公众号:liangxiegame

21.使用对象池时的一些细节  - 图1

如果有帮助到您:

如果觉得本篇教程对您有帮助,不妨通过以下方式赞助笔者一下,鼓励笔者继续写出更多高质量的教程,也让更多的力量加入 QFramework 。