一、概念解释
1、单例模式是指一个类只允许存在一个实例对象,且该对象能被系统中其他模块所共用。该模式主要解决了全局变量的问题,在同一时间只有一个实例被使用,避免了多次重复实例化造成的资源浪费。
2、单例模式保证了在系统中,某一个类只有唯一的实例存在,系统性能更高。该模式在实际应用中经常被用来映射全局资源,如日志文件、配置文件等。
3、单例模式对于某些具有强制一致性的操作,如系统日志、应用配置等,也非常适用。
二、使用场景
1、需要频繁实例化然后垃圾回收的对象,如工具类对象。
2、大量的共享对个数有限的资源,如数据库连接池、线程池、操作系统的文件系统、打印机等。
3、各种工具类、配置文件类等较为内部复杂或外部资源耗费较大的类,使用单例模式可以避免频繁地创建和销毁对象。
三、优缺点
1、单例模式的优点:
a、在需要使用相同数据的地方可以直接使用单例得到的实例完成操作。
b、单例模式在实际应用中,常用于创建共享阅读资源,例如配置文件、数据库连接池等。
c、一个对象只被实例化一次,减少了系统开销,节约了内存资源。
d、可以更好地控制数据的一致性。
2、单例模式的缺点:
a、单例模式本身是一种单一性的设计模式,因此也同时意味着它的使用条件非常苛刻。
b、单例类的扩展可能会导致单例失效,因为由于一个类只有一个实例,因此不能扩展该类来生成新的实例。
四、代码示例
下面是一个单例模式的代码示例:
public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance() { if (null == instance) { instance = new Singleton(); } return instance; } }
这个代码示例中,构造函数被声明为 private 访问权限的,这样就无法在类的外部调用构造函数来创建类的实例。getInstance() 方法(因为是静态的,所以可以直接通过类名调用)返回 Singleton 类的唯一实例。getInstance() 的实现非常简单。在该方法中,如果 instance 为 null,即还没有创建实例,就创建一个新的实例;如果已经创建了实例,就返回该实例。这里需要注意的是 instance 声明为 static 和 private 类型,一是为了访问的方便,二是为了保证该实例在类装载时就被创建出来,这样就避免了多线程访问的同步问题。
原创文章,作者:ZFKVN,如若转载,请注明出处:https://www.506064.com/n/371464.html