乌啦呀哈呀哈乌啦!

欢迎光临,这里是喵pass的个人博客,希望有能帮到你的地方

0%

单例模式

优点

  1. 全局唯一实例:单例模式确保在整个应用程序中只有一个实例存在,可以提供一个全局的访问点,方便对实例的管理和调用。
  2. 节省资源:由于只有一个实例存在,可以避免重复创建实例,节省了系统资源。
  3. 避免竞态条件:在多线程环境下,使用单例模式可以避免由于竞态条件而导致的问题,如资源争夺、数据不一致等。
  4. 实现了懒加载:某些单例模式的实现方式(如懒汉式)在需要时才创建实例,实现了延迟加载,节省了内存空间。
  5. 继承monobehaviour的单例有unity生命周期函数和也可以调用协程,可以用来控制没有继承monobehaivour的脚本组件

缺点

  1. 可能引入全局状态:由于单例模式提供了全局访问点,可能会导致多个部分之间共享了同一个状态,增加了系统的耦合性。
  2. 可能造成性能瓶颈:在高并发环境下,单例模式的实现需要考虑线程安全性,可能会引入锁机制,导致性能下降。
  3. 隐藏了依赖关系:单例模式的使用会隐藏类的依赖关系,增加了代码的复杂性和理解难度。
  4. 不利于扩展和测试:单例模式一般是通过静态方法获取实例,难以进行扩展和替换,也不利于单元测试。
  5. 可能造成内存泄漏:如果实例被长时间持有而不释放,可能会造成内存泄漏,特别是在移动端或长时间运行的服务中。

实例化方法

懒汉式(Lazy Initialization):在第一次使用时创建实例。

1
2
3
4
5
6
7
8
9
10
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}

饿汉式(Eager Initialization):在类加载时就创建实例。

1
2
3
4
5
6
7
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}