单例模式,英文原话为:Ensure a class has only one instance, and provide a gloabal point of access to it;即:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式的主要作用是:确保一个类只有一个实例存在。单例模式可以用在建立目录、数据库连接等需要单线程操作的场合,用于实现对系统资源的控制。
单例模式又有两种表现形式:饿汉式单例,类加载时实例化对象;懒汉式单例,第一次引用时实例化对象。两种表现形式的代码比较:
public class Singleton { /*//饿汉式单例形式,类加载时初始化对象 private static Singleton instance = new Singleton(); //构造方法私有化,保证外部无法直接实例化 private Singleton(){ } //获得实例化对象 public static Singleton getInstance(){ return instance; }*/ //懒汉式单例形式,第一次引用类时,进行对象初始化 private static Singleton instance = null; //构造方法私有化,保证外部无法直接实例化 private Singleton(){ } /* * 使用Synchronized,保证在多线程下之创建一个实例 */ public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
单例模式的优点:1、减少了内存的开支,特别是一个对象需要频繁的创建、销毁,而且创建或销毁的性能又无法优化时,单例模式的优势就会很明显;2、单例模式只生成一个实例,减少了系统的性能开销,当一个对象的产生需要比较多资源时,如读取配置、产生其他依赖对象时,则可以通过在启用时直接产生一个单例对象,然后永久驻留内存的方式解决;3、单例模式可以避免对资源的多重占用;4、单例模式可以在系统设置全局的访问点,优化和共享资源访问。
单例模式的缺点:1、无法创建子类,扩展困难;2、对测试不利,在并发开发环境中,如果采用单例模式的类没有完成,是不能进行测试的;3、单例模式与单一职责原则有冲突。
单例模式的使用场景:1、要求生成唯一序列号的环境;2、在整个项目中需要一个共享访问点或共享数据的;3、创建一个对象需要消耗的资源过多时;4、需要定义大量的静态常量和静态方法的环境。
相关博客连接
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-16 16:49:28