单例模式:
定义:一个类只能有一个实例,并且自行实例化向整个系统提供该实例
实现:
①构造函数私有化
②定义一个该类的静态私有对象属性
③提供一个静态的公有的方法用于创建或获取它本身的静态私有对象
java中实现单例模式的几种方式如下:
第一种:饿汉式,当类被加载时就创建该对象实例
class Singleton{
private static Singleton singleton0bj=new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return singleton0bj;
}
}
第二种:懒汉式,当第一次需要时才创建该实例
public class Singleton{
private static Singleton demo=null;
private Singleton(){
}
public static Singleton getInstance(){
if(demo==null)
demo=new Singleton();
return demo;
}
}
第三种:double-checked方式,支持多线程,可以避免非必要的对象锁定
class Singleton{
private static Singleton Singletonobj=null;
private Singleton(){
}
public static Singleton getInstance(){
if(Singletonobj==null)
{
synchronized(Singleton.class){
if(Singletonobj==null)
Singletonobj=new Singleton();
}
}
return Singletonobj;
}
}
第四种:枚举方式
①枚举允许有自己的构造函数,并且只能是private
②枚举项默认是static final形式,使用前只能被构造一次
③枚举项INSTANCE的构造过程是线程安全的
enum Singleton{
INSTANCE;
}
为了保证单例模式,单例类或其子类都不能实现cloneable或serialzable接口