单例模式,英文原话为: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、单例模式与单一职责原则有冲突。
单例模式的使用场景:1、要求生成唯一序列号的环境;2、在整个项目中需要一个共享访问点或共享数据的;3、创建一个对象需要消耗的资源过多时;4、需要定义大量的静态常量和静态方法的环境。
相关博客连接
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/yanglun1/article/details/47617563