Unity开发之设计模式---单例模式
曾记录一篇关于设计模式的日志:《Head First 设计模式》——学习总结,在那篇文章中只是记录一些重要的概念,缺乏实战,也不好理解。下面记录在项目中使用到的设计模式,理论和实际相结合才有价值,“把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用它们。”。 单例模式是最简单也是用的最多一种模式,概念简单就不再详细说明了 C#中定义单例模式
public class DataManager
{
#region Singleton
protected static DataManager m_Instance;
public static DataManager Instance
{
get
{
if (m_Instance == null)
{
m_Instance = new DataManager();
}
return m_Instance;
}
}
#endregion
public void OnLoad(){}
}
//使用示例
DataManager.Instance.OnLoad();
模板定义及示例
/// <summary>
/// 单例模板类
/// </summary>
/// <typeparam name="T">类型</typeparam>
public class Singleton<T> where T : class, new()
{
//
// Static Fields
//
protected static T m_Instance;
//
// Static Properties
//
public static T Instance
{
get
{
if (m_Instance == null)
{
m_Instance = new T();
}
return m_Instance;
}
}
//
// Static Methods
//
public static T GetInstance()
{
return Instance;
}
}
public class DataManager :Singleton<DataManager>
{
public void OnLoad(){}
}
//使用示例 DataManager.Instance.OnLoad();
Unity中挂在组件上的单例
public class AppUser : MonoBehaviour
{
#region Sington and MonoBehaviour
private static AppUser instance;
public static AppUser Instance
{
get
{
if (instance) {
return instance;
}
else {
instance = GameObject.FindObjectOfType<AppUser>();
}
if (instance)
{
return instance;
}
else {
GameObject obj = new GameObject(typeof(AppUser).ToString());
//场景不消除
GameObject.DontDestroyOnLoad(obj);
instance = obj.AddComponent<AppUser>();
}
return instance;
}
}
void Awake()
{
instance = this;
}
private void Update()
{
}
#endregion
public void OnStart(){}
}
//使用示例,场景控制脚本中的Start
void Start()
{
AppUser.Instance.OnStart();
}
在场景控制脚本中调用,会创建一个空对象挂载该脚本。并在场景切换后不销毁。 在客户端开发中基本不用考虑线程安全的问题。同时在模块很多的情况下,为了调用方便,单例类使用会很多。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xue_huashan@163.com
文章标题:Unity开发之设计模式---单例模式
文章字数:440
本文作者:max-xue
发布时间:2018-05-18, 21:00:48
最后更新:2019-11-09, 21:59:24
原始链接:http://blog.le-more.com/2018/05/18/u3d/e8-ae-be-e8-ae-a1-e6-a8-a1/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。