单例模式

Posted FingerCaster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

单例模式:是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例

Unity中的单例分为两种,一种是继承自MonoBehaviour的一种是不继承的

继承自Mono的类不能使用New去创建实例  所以继承自mono的单例可以使用以下方式实现

//1.继承自泛型基类  单例的核心 是创建出一个物体,添加这个组件,并只返回这个组件 从而实现单例

public class SingleTonBehaviorBase<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
public static T GetInstance()
{
_instance = GameObject.FindObjectOfType<T>();
if (_instance == null)
{
GameObject goObj = new GameObject(typeof(T).ToString());
_instance = goObj.AddComponent<T>();
}
return _instance;
}
}

//2.自己写  可以使用 Awake 赋值

public class A

{

  public static A Instance;

  void Awack()

  {

    Instance = this;

  }

}

普通类的单例模式 普通类可以使用new关键字去构造实例,所以方式就很多了

1.泛型单例  继承 

public class SingleTonBase<T> where T : new()
{

private static T _instance;
public static T GetInstance()
{
if (_instance == null)
_instance = new T();
return _instance;
}

2.属性

public class A

{

  private static A _instance;

  public A Instance{

    get

    {

      if(_instance == null)

        _instance = new A();

      return A;

    }

  }

  //私有构造函数,防止外部创建实例

  private A(){

  }

}

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式(单例设计模式)详解

Java模式设计之单例模式(二)

单例模式(饿汉式单例模式与懒汉式单例模式)

单例模式

单例模式

设计模式之单例模式