单例模式(Singleton Pattern)
是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
C#版本的 Singleton 类。
public class Singleton {
//创建 Singleton的一个对象
private static Singleton instance = new Singleton();
//获取唯一可用的对象
public static Singleton GetInstance(){
return instance;
}
//让构造函数为 private,这样该类就不会被其他类实例化
private Singleton(){}
public void showMessage(){
print("Hello World!");
}
}
使用方式
Singleton.GetInstance().showMessage();
Unity版本的Singleton类。
public class Singleton: MonoBehaviour {
//私有的静态实例
private static Singleton_instance = null;
//共有的唯一的,全局访问点
public static Singleton Instance
{
get
{
if (_instance == null)
{ //查找场景中是否已经存在单例
_instance = GameObject.FindObjectOfType<Singleton>();
if (_instance == null)
{ //创建游戏对象然后绑定单例脚本
GameObject go = new GameObject("Singleton");
_instance = go.AddComponent<Singleton>();
}
}
return _instance;
}
}
private void Awake()
{ //防止存在多个单例
if (_instance == null)
_instance = this;
else
Destroy(gameObject);
}
public void showMessage()
{
print("Hello World!");
}
}
使用方式
Singleton .Instance.showMessage();
泛型单例模板
class Singleton<T> where T: class,new()
{
private static T _instance;
private static readonly object syslock=new object();
public static T getInstance()
{
if (_instance == null)
{
lock (syslock) {
if (_instance == null)
{
_instance = new T();
}
}
}
return _instance;
}
}
使用方式
class myclass : Singleton<myclass> {
public void showMessage()
{
Console.WriteLine("Hello World");
}
}
myclass.getInstance().showMessage();