Unity设计模式之单例模式

使用单例的目的

在我们的整个游戏生命周期中,有很多对象从始至终有且只有一个。这个唯一的实例只需要生成一次,并且直到游戏结束才需要销毁。

单例模式一般应用于管理器类,或者是一些需要持久化存在的对象。

Unity单例的懒汉模式代码:

    //Unity单例的懒汉模式
    private static Single _instance = null;
    public static Single Instance()
    {
        if (_instance == null)
        {
            GameObject go = new GameObject("单例");
            _instance = go.AddComponent<Single>();
        }
        return _instance;
    }

Unity单例的饿汉模式代码:

    //Unity单例的饿汉模式
    private static Single _instance = null;
    public static Single Instance()
    {
        return _instance;
    }

    void Awake()
    {
        if (_instance == null)
        {
            _instance = this;
            //如果切换场景时,希望单例中的数据不清空
            DontDestroyOnLoad(gameObject);//加载场景时不消毁
        }
        else
        {
            //保留老的单例,删除新的单例对象
            Destroy(this.gameObject);
        }
    }

单例和静态的区别

1、单例方法可以继承,静态的不可以。

2、单例存在着创建实例的过程,生命周期并不是整个运行时,静态方法在编译时就存在,整个过程中是一直有效的。

如何选择单例和静态

当方法中需要用到实力本身的状态,也就是说需要用到实力成员时,使用单例调用。

当方法完全不涉及到实例,只是共享类中的一些状态的话,或者不需要任何状态,这个方法就是静态方法。

滥用单例出现的问题

1、代码的耦合性会增加。

2、单个类的职责可能会过大,违背单一指责原则。

3、因为单例的对象永远不消毁,过多的单例会造成性能问题。

猜你喜欢

转载自blog.csdn.net/qq_38721111/article/details/81212106