单例模式的优缺点和使用场景
(此部分有待大量内容需要更新补充,我还不太会(=ω=;))
单例模式:
单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类 必须保证 只有一个实例存在。 许多时候整个系统只需要 拥有一个的全局对象,这样有利于我们协调系统整体的行为。
比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由 一个单例对象 统一读取,然后服务进程中的 其他对象 再通过 这个单例对象 获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
实现单例模式的思路是:
一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);
当我们调用这个方法时,如果 类持有的引用不为空 就返回这个引用,如果 类保持的引用为空 就创建该类的实例 并将实例的引用赋予该类保持的引用;
同时我们 还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用 该类的构造函数 来实例化该类的对象,只有通过该类提供的静态方法 来得到该类的唯一实例。
单例模式要素:
a.私有构造方法
b.私有静态引用指向自己实例
c.以自己实例为返回值的公有静态方法
优点:
1.在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就 防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
2.单例模式具有一定的伸缩性,类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
3.提供了对唯一实例的受控访问。
4.由于在系统内存中只存在一个对象,因此可以 节约系统资源,当需要频繁创建和销毁的对象时 单例模式无疑可以提高系统的性能。
5.允许可变数目的实例。
6.避免对共享资源的多重占用。
缺点:
1.不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
2.由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
3.单例类的职责过重,在一定程度上违背了“单一职责原则”。
4.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
public static MouseManager Instance;
static :静态的,不能实例化(不能使用new关键字创建静态类类型的变量)防止其他程序员在写代码时,来实例化该静态类。
防止在类的内部声明任何实例字段或方法。 MouseManager 是类名,instance是自定义的变量名字。
private void Awake()
{
if (Instance != null)
Destroy(gameObject);
Instance = this;
DontDestroyOnLoad(gameObject); //保证在场景的转换中,该脚本存在于任何场景中,不会因为加载新的场景就消失不见。
}