Unity 单例模式

2021-05-12 11:30

阅读:484

  处理这些问题的方法可能很多,可以在各方面对它进行限制,例如:
  • 首先在单例里增加初始化方法,然后在合适的时机主动去初始化这个单例,已达到控制其生命周期的目的

  • 使用静态方法,这样就不会把实例暴露出来

  • 严格控制API的数量和自身的职责

四、几种单例模式

  懒汉模式:如果不调用则不会进行实例化

 1 public class Slingleton_Pattern : MonoBehaviour
 2 {
 3     private static Slingleton_Pattern Instance;
 4 
 5     public static Slingleton_Pattern _Instance()
 6     {
 7         if(Instance == null)
 8         {
 9             Instance = new Slingleton_Pattern();
10         }
11         return Instance;
12     }
13 }

  饿汉模式:系统运行则主动实例化

1 public class Slingleton_Pattern : MonoBehaviour
2 {
3     private static Slingleton_Pattern Instance = new Slingleton_Pattern();
4 
5     public static Slingleton_Pattern _Instance()
6     {
7         return Instance;
8     }
9 }

  继承MonoBehaviour:便于其他模块调用,但非唯一性

 1 public class Slingleton_Pattern : MonoBehaviour
 2 {
 3     private static Slingleton_Pattern Instance;
 4 
 5     void Awake()
 6     {
 7         Instance = this;
 8     }
 9 
10     public static Slingleton_Pattern _Instance()
11     {
12         return Instance;
13     }
14 }

  其他

 1 public class Slingleton_Pattern : MonoBehaviour
 2 {
 3     private static Slingleton_Pattern Instance = null;
 4 
 5     public static Slingleton_Pattern _Instance
 6     {
 7         get
 8         {
 9             if (Instance == null)
10             {
11                 Instance = FindObjectOfType(typeof(Slingleton_Pattern)) as Slingleton_Pattern;
12             }
13             return Instance;
14         }
15     }
16 }

五、总结

  单例的使用风险是可以在任意处进行访问,并且开放了实例的访问权限,在项目庞大的时候滥用单例会导致引用逻辑混乱,所以我们在设计项目结构的时候,尽量让业务模块和自己模块的逻辑形成单向的访问,避免所有逻辑交叉访问,设计单例的时候,对单例做限制,防止外界获取单例的整个实例,只对外界开放一部分服务,这样便可以缓解使用单例模式带来的风险和危害。

 

***| 以上内容仅为学习参考、学习笔记使用 |***


评论


亲,登录后才可以留言!