java设计模式之单例模式(Singleton)

Java设计模式之单例模式

单例模式是什么?

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式如何来设计呢?

保证一个类只能有一个实例,那么我们不能无限制的new 来创建,因为我们知道,new一次就是一个新的对象,那么构造器只能私有化private -- 构造器私有化    


构造器私有化了,问题又出现了,构造器私有化了,那么我们怎么来创建唯一的对象呢?-- 提供一个公有的方法/提供一个公有的静态属性

再分析一下,公有方法, 实例方法还是类方法呢?--公有的类方法(获取类实例)

依据以上的推测设计我们可以得出单例类的大致结构:

public class Singleton {
    //第一:构造器私有化
    private Singleton(){}
    
    //第二:可能1.提供一个共有的类方法
    public static Singleton getInstance(){
        return null;// 这儿先返回null 让方法编译通过
    }
    //第二:可能2. 静态属性
    public static Singleton instance;//但是问题是这儿怎么给instance赋值呢???????

}

   现在又出现了一个问题,我们的这个类的唯一实例如何获取?


直接在getInstance() 中new Singleton()    -- 不行哎,调用一次方法重新创建了一个新的对象


大家在想想,我们上面是不是有一个静态属性啊,静态属性只是在类加载的时候初始化的,而且只是在类加载时初始化的。


 ok,那么我们就可以设计出单例模式了,根据我们设计出来的可以有两种简单不同的获取对象的方式,一些文人雅士把这两种获取对象的方式分别叫做  饱汉式 和饿汉式。


package com.jsd.jsd1404.design;

public class Singleton {
	private static Singleton instance;
	public static Singleton getInstance(){
		if(instance==null){
			synchronized (Singleton.class) {
				instance=new Singleton();
			}
		}
		return instance;
	}
	private Singleton(){
		
	}
}


java设计模式之单例模式(Singleton),布布扣,bubuko.com

java设计模式之单例模式(Singleton)

上一篇:JS 根据时区获取时间


下一篇:VC++: LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏