优点
- 全局唯一实例:单例模式确保在整个应用程序中只有一个实例存在,可以提供一个全局的访问点,方便对实例的管理和调用。
- 节省资源:由于只有一个实例存在,可以避免重复创建实例,节省了系统资源。
- 避免竞态条件:在多线程环境下,使用单例模式可以避免由于竞态条件而导致的问题,如资源争夺、数据不一致等。
- 实现了懒加载:某些单例模式的实现方式(如懒汉式)在需要时才创建实例,实现了延迟加载,节省了内存空间。
- 继承monobehaviour的单例有unity生命周期函数和也可以调用协程,可以用来控制没有继承monobehaivour的脚本组件
缺点
- 可能引入全局状态:由于单例模式提供了全局访问点,可能会导致多个部分之间共享了同一个状态,增加了系统的耦合性。
- 可能造成性能瓶颈:在高并发环境下,单例模式的实现需要考虑线程安全性,可能会引入锁机制,导致性能下降。
- 隐藏了依赖关系:单例模式的使用会隐藏类的依赖关系,增加了代码的复杂性和理解难度。
- 不利于扩展和测试:单例模式一般是通过静态方法获取实例,难以进行扩展和替换,也不利于单元测试。
- 可能造成内存泄漏:如果实例被长时间持有而不释放,可能会造成内存泄漏,特别是在移动端或长时间运行的服务中。
实例化方法
懒汉式(Lazy Initialization):在第一次使用时创建实例。
1 | public class Singleton { |
饿汉式(Eager Initialization):在类加载时就创建实例。
1 | public class Singleton { |