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(){
}
}