这里的“接口”一词并不是指C#关键字。如果你知道我在这个问题中描述的方法的更好名称,请告诉我。
我在我的一个程序中使用单例。 在编程时,我只是认为将所有单例的方法实现为静态也很好,充当单例的“接口”。
重点是写
int ret = MyClass.GetValue();
而不是
int ret = MyClass.singleton.GetValue();
这就是我所描述的单身人士的“界面”,这就是我如何实现它。
public class MyClass : MonoBehaviour
{
private static MyClass singleton = null;
private int theValue = 123;
private int InstanceGetValue();
{
return theValue;
}
public static int GetValue()
{
if (singleton == null)
return default(int);
return singleton.InstanceGetValue();
}
private void OnEnable()
{
if (singleton == null)
singleton = this;
}
private void OnDisable()
{
if (singleton == this)
singleton = null;
}
}
所以我的问题是:
它使每次调用看起来都更好,并且实现起来很简单!为什么这不是使用单身人士的默认方式?
这是Unity代码,但即使您不使用Unity,也可以回答我的问题。您知道,当此对象在此场景中变为活动状态时会自动调用OnEnable,并在对象变为非活动状态时调用OnDisable。
在本主题中,我们不讨论在C#中使用单例是否是一种好习惯。很多很棒的话题已经回答了这个问题。
答案 0 :(得分:3)
你在这里做的似乎是尝试编写一个适配器以允许访问单例。如果您查看Singleton模式的Wikipedia页面,您会注意到它周围的实现细节指定了两个必需品。
你在这里尝试做的是隐藏全局访问,这让我相信你正试图隐藏全局访问点,或者只是想通过从以下内容中排除单例调用来编写更少的代码:{ {1}}
我认为你在这里要问自己的主要问题是你试图实现的两个问题。如果您试图隐藏全局访问点,我建议您首先查看为什么要使用单例,但如果您尝试编写更少的代码,我宁愿质疑为什么要尝试编写更少的代码,如果你没有使用一些难以阅读的编码实践。
编辑:我理解为什么你只想在场景中使用一个实例,但我宁愿完全负责管理生命周期,而不是仅仅尝试利用单例模式。