什么是单例设计模式?
简单来说单例设计模式就是确保一个类只有一个实例 (类的实例对象在类的内部生成)
为什么要有单例设计模式?
单例模式是资源管理的必备模式,保证一个类只有一个实例,并且这个实例易于被访问。
如何实现单例设计模式?
1.构造方法设为private
2.内建静态实例
3.静态构造方法给实例做初始化
C#中 简历单例
public class Singleton{
//内建静态实例
private static Singleton m_singleton;
//构造函数被私有化,那么其他的类就无法使用这个构造函数,那么当然无法创建相应对象了
private Singleton();
//用属性的Get方法获取类的实例对象
public static Singleton Instance{
get{
//判断类的对象实例是否为空
if (m_singleton == null)
{
//实例化类的对象
m_singleton = new Singleton();
}
return m_singleton;
}
}
}
C# 建立泛型单例
public class Singleton<T> where T:class
{
//内建静态实例
private static T t;
//构造函数被私有化,那么其他的类就无法使用这个构造函数,那么当然无法创建相应对象了
private Singleton();
//用属性的Get方法获取类的实例对象
public static Singleton Instance{
get{
//判断类的对象实例是否为空
if (t == null)
{
//实例化类的对象
t = new Singleton();
}
return t;
}
}
}
你需要做成 单例的 类
例:
public class SingletonTest:Singleton<SingletonTest>
{
public string name;
public int age;
public string job;
}
在其他类中使用可以直接用类名索引出字段或方法
Unity 设计单例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonoSingleton{
//内建静态实例
private static MonoSingleton monoSing;
public static MonoSingleton Instance{
get{
//在游戏场景中寻找挂有 MonoSingleton 脚本的游戏物体
monoSing=GameObject.FindObjectOfType(typeof(MonoSingleton)) as MonoSingleton;
//判断是否找到这个 MonoSingleton 这个脚本组件
if (monoSing == null) //如果场景中没有找到 MonoSingleton 这个组件
{
//新建一个物体来挂载 MonoSingleton 这个脚本组件
GameObject go=new GameObject();
monoSing = go.AddComponent<MonoSingleton>();
}
//保证了一个类只有一个对象实例
return monoSing;
}
}
}
unity 中 泛型单例(把前面的类改为泛型类)
public class MonoSingleton<T>:Monobehaviour where T:Component{
//内建静态实例
private static T monoSing;
public static T Instance{
get{
//在游戏场景中寻找挂有 MonoSingleton 脚本的游戏物体
monoSing=GameObject.FindObjectOfType(typeof(T)) as T;
//判断是否找到这个 MonoSingleton 这个脚本组件
if (monoSing == null) //如果场景中没有找到 MonoSingleton 这个组件
{
//新建一个物体来挂载 MonoSingleton 这个脚本组件
GameObject go=new GameObject();
monoSing = go.AddComponent<T>();
}
//保证了一个类只有一个对象实例
return monoSing;
}
}
}
任何继承了泛型单例的类都是单例