单例类只能有一个实例,并且单例类必须自己创建自己的唯一实例,单例类必须给所有其他对象提供这一实例。
除了供其他对象获取本单例类对象的方法是public的,其他属性或方法全为private,尤其是构造方法也是private,防止被其他类进行new从而创建不止一个实例。
懒汉式:在提供给外界调用以获得唯一实例的方法中写new
private static MySingleton mySingleton = null;
public static MySingleton getInstance(){
if(mySingleton == null){
mySingleton = new MySingleton();
}
return mySingleton;
}
饿汉式:直接给静态变量赋值时new,类加载时便创建唯一的实例
private static MySingleton2 mySingleton = new MySingleton2();
public static MySingleton2 getInstance(){
return mySingleton;
}
登记式:
登记式单例模式是在原来的基础上进行数量上的扩展,对多个单例进行管理,把每次创建的单例登记到map中。
调用时先判断该单例是否已经创建,是的话返回该单例,否则创建并登记到map中再返回。