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

上篇文章使用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 - 博客园

OK,今天就到这里

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

更多内容

  • QFramework 地址:https://github.com/liangxiegame/QFramework

  • QQ 交流群:623597263

  • Unity 进阶小班

    • 主要训练内容:
      • 框架搭建训练(第一年)
      • 跟着案例学 Shader(第一年)
      • 副业的孵化(第二年、第三年)
    • 权益、授课形式等具体详情请查看《小班产品手册》:https://liangxiegame.com/master/intro
  • 关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。

发布了58 篇原创文章 · 获赞 32 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u010125551/article/details/80647512