知其然知其所以然,自我总结
日常工作中最常用到的设计模式就是单例模式了,来简单介绍一下单例的使用和创建。c#或untiy编程中,某些类需要在脚本中多处调用,为了使用方便,减少实例化此类的次数,提高程序性能,此时此类就需要用到-----单例模式。
c#
单例模式的特点:1、定义一个可供全局访问的对象 。 2、将构造方法私有化,只能在类的内部构造实例化。3、将全局访问对象作为对外的唯一访问点。
public class GameManager
{
private static GameManager m_Instance;
//设置静态全局访问点,并保证是全局唯一的对外访问点
public static GameManager Instance
{
get
{
if (m_Instance == null)
{
return new GameManager();
}
return m_Instance;
}
set
{
value = m_Instance;
}
}
//私有化构造函数,保证只能在类的内部构造,不能在外面new
private GameManager()
{
}
}
unity
继承Monobehaviour类的单例: *单例模式如下: 1、Unity中继承MonoBehaviour类是不可以实例化的(不能用new来初始化),unity系统会自动创建实例。 2、需要调用脚本时,要用到Addcompoment<脚本名>方法 3、如果需要多次调用可以设计为单例模式,单例模式中对象需要在Awake中初始化
* 单例模式如下: Unity中继承MonoBehaviour类是不可以实例化的(不能用new来初始化),unity中会自动创建实例。
* 需要调用脚本时,要用到Addcompoment<脚本名>方法
* 如果需要多次调用可以设计为单例模式,单例模式中对象需要在Awake中初始化
*/
public class GameManager : MonoBehaviour
{
private static GameManager m_Instance;
public static GameManager Instance
{
get
{
if(m_instance==null)
{
GameObject obj = new GameObject();
m_Instance = obj.AddComponent<GameManaget>();
}
return m_Instance;
}
set
{
value = m_Instance;
}
}
private void Awake()
{
m_Instance = this;///在Awake中初始化
}
}