单例模式:
确保一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例
解析这句话:
- 确保一个类只有一个实例,说明它的构造方法不能是公开的,不能被外界进行实例化,所以只能是 private。
- 只有一个实例,这个实例属于当前类,即这个实例是当前类的类成员变量,静态变量。类变量就是静态变量,那么就是需要使用static 来修饰。
- 终上所述,所以单例模式中构造方法是用 private 和 static 来修饰的。
- 后半句,向整个系统来进行提供这个实例,说明我们需要提供一个静态的方法。向外界来提供当前类的实例。实例只能内部来进行实例化。
单例模式有两种一种是懒汉式,一种是饿汉式。
懒汉式
懒汉式,只有调用时,才进行实例化。
public class SingletonPatten{
public static void main(String[] args){
}
}
class Bank{
//构造方法为private
private Bank(){
}
//声明当前类对象,没有初始化
private static Bank instance = null;
//系统使用实例时,调用方法。
public static Bank getInstance(){
instance = new Bank();
return instance;
}
}
安全式懒汉式
class Bank{
private static voliate Bank instance = null;
//方式一:效率稍差
public synchronized static Bank getInstance() {
if (instance == null) {
instance = new Bank();
}
return instance;
}
//方式二:效率稍高
public static Bank getInstance2() {
if (instance == null) {
synchronized (Bank.class) {
instance = new Bank();
}
}
return instance;
}
}
饿汉式
饿汉式,在类中先实例化,在调用。
public class SingletonPatten{
public static void main(String[] args){
}
}
class Bank{
private Bank(){
}
//先进行实例化
private static Bank instance = new Bank();
public static Bank getInstance(){
return instance;
}
}