zoukankan      html  css  js  c++  java
  • 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

    更多内容

  • 相关阅读:
    mysql最后一个内容orm
    mysql第五天:
    mysql第二天 数据的增删改查补充及外键
    MYsql 初识
    第二天openc的内容:图片的缩放、旋转、格式转换
    第二个内容第一天 opencv的基本内容:
    第五十七天 bom 的新知识
    第五十六天jQurey的内容新增:
    第五十五天jQery内容的进阶
    windows11 upgrade
  • 原文地址:https://www.cnblogs.com/liangxiegame/p/9123353.html
Copyright © 2011-2022 走看看