注意三种单例模式的实现互相独立。因为偷懒把他们写在同一个类里了。
package HomeWork110306;
/**
* 单例模式:保证一个java的类只有一个实例
* 可以通过将构造方法声明成私有的,在类内部创建实例
* 对外提供一个公用方法来获取这个实例
* 饱汉模式:一般认为饱汉模式安全。每次申请一次内存,宁撑死不挨饿
* 饥汉模式:注意饥汉模式下的公用方法必须是线程同步的,原因????
* 其他模式:定义一个类,构造方法为private,所有方法为static的
* @author wybin
*/
public class Singleton {
/**1.饱汉模式
* 每次都要生成一次对象,所以饱了。这样总的类对象不是多个了吗?
* 是指每次调用这个类时都要new一次吗?可是内存不是只有一份吗?
*/
private Singleton(){//构造方法是私有的
}
//实例化代码放在静态代码块里可以提高程序执行效率,但可能更占空间
private final static Singleton instance = new Singleton();
//提供公用方法,用于获取类内部的类实例
public static Singleton getInstance(){
return instance;
}
/**2.饥汉模式,注意其getInstance方法是synchronized的
* 使用getInstance判断,当实例为空时才生成
* 不用每次生成对象,第一次使用生成实例
* 即刚开始类实例对象为null,还未申请内存。在getInstance里针对类实例进行判断
* 为空,即饥饿状态,需要创建后返回,否则直接返回
* @author wybin
*/
private Singleton(){
}
private static instance = null;//先声明一个类本身实例成员。初始化为空。先不申请内存
public static synchronized Singleton getInstance(){
if(instance == null) instance = new Singleton();
return instance;
}
/**3.其他模式(自己猜的)
* 构造方法为private
* 其他方法全部为static
*/
private Singleton(){
}
private static instance = null;
private static Singleton getInstance(){
if(instance == null) instance = new Singleton();
return instance;
}
}