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 }
五、总结
单例的使用风险是可以在任意处进行访问,并且开放了实例的访问权限,在项目庞大的时候滥用单例会导致引用逻辑混乱,所以我们在设计项目结构的时候,尽量让业务模块和自己模块的逻辑形成单向的访问,避免所有逻辑交叉访问,设计单例的时候,对单例做限制,防止外界获取单例的整个实例,只对外界开放一部分服务,这样便可以缓解使用单例模式带来的风险和危害。
***| 以上内容仅为学习参考、学习笔记使用 |***
评论
亲,登录后才可以留言!