- /**
- * 单例模式:保证一个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;
- }
- }