Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节
发表于2018-01-21
上篇文章使用SafeObjectPool实现了一个简单的Msg类。代码如下:
class Msg : IPoolAble,IPoolType
{
#region IPoolAble 实现
public void OnRecycled()
{
Log.I("OnRecycled");
}
public bool IsRecycled { get; set; }
#endregion
#region IPoolType 实现
public static Msg Allocate()
{
return SafeObjectPool<msg>.Instance.Allocate();
}
public void Recycle2Cache()
{
SafeObjectPool<msg>.Instance.Recycle(this);
}
#endregion
}
这个类虽然只是用来做SafeObjectExample的实例类的,但是还是有改进的空间。
在Msg的使用场景中,我们只用到了Msg类的Allocate和Recycle2Cache方法。而OnRecycled和IsRecycle这两个API用户都用不到,或者说用户用了会对Msg的管理造成风险,所以我们要想办法使用户不能访问到这两个API。
这个是可以做到的,就是把OnRecycled和IsRecycled使用接口的显示实现。
代码如下:
class Msg : IPoolAble,IPoolType
{
#region IPoolAble 实现
void IPoolAble.OnRecycled()
{
Log.I("OnRecycled");
}
bool IPoolAble.IsRecycled { get; set; }
#endregion
#region IPoolType 实现
public static Msg Allocate()
{
return SafeObjectPool<msg>.Instance.Allocate();
}
public void Recycle2Cache()
{
SafeObjectPool<msg>.Instance.Recycle(this);
}
#endregion
}
这样,创建出来的 Msg对象不能直接访问OnRecycled和IsRecycled这两个API了,如果硬是要访问也可以,就要将Msg对象转成IPoolAble接口就可以访问了了。
- 最近在看《Framework Design Guidlines》,里边说IPoolAble这样的命名有问题,应该是IPoolable,嗯…,要去重构了…
关于接口的显示实现是C#的语法细节,随便贴上一篇给大家参考:
C# 接口的隐式与显示实现 - Ben—Zhang - 博客园:http://www.cnblogs.com/ben-zhang/archive/2012/12/18/2823455.html
OK,今天就到这里
相关链接:
附: 我的框架地址:https://github.com/liangxiegame/QFramework
教程源码:https://github.com/liangxiegame/QFramework/tree/master/Assets/HowToWriteUnityGameFramework/
转载请注明地址:凉鞋的笔记http://liangxiegame.com/
QFramework&游戏框架搭建QQ交流群: 623597263
微信公众号:liangxiegame