单例模式(Singleton):一个类只会生成唯一的一个对象
出发点:一个类在生成的时候,构造方法肯定会被调用,所以从构造方法入手。构造方法私有化,限制用户不能在类外new对象,那么类外一个对象都生成不出?!因为私有的(private)可以在类的内部使用,所以可以在类的内部new一个对象,然后提供一个public方法将生成对象返回,所以在类的外部用提供的方法接收对象。
第二个问题:实例方法,要有对象才去调用,而类外生成不了对象,所以排除实例方法,用静态(static)方法,通过类的名字调用。
第三个问题:不能调用一次方法,就new出一个对象,所以不能将生成对象的语句放在方法里面。应该先把对象生成好,在方法里面返回(return)这个对象,类外调用这个方法。同时,静态方法只能访问静态的,所以对象的引用要是静态的。
Java代码:
package come.teat;
public class SingletonTest {
/**
* @单例模式
*/
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
//如果singleton1和singleton2是同一个对象的话,它们的地址是一样的
System.out.println(singleton1 == singleton2); //输出true,证明是同一对象;反之,则不是
}
}
//单例模式的第一种实现方式
public class Singleton {
private Singleton() {
}
private static Singleton singleton = new Singleton();
public static Singleton getInstance() {
return singleton;
}
}
//单例模式的第二种实现方式
public class Singleton {
private Singleton() {
}
private static Singleton singleton;
public static Singleton getInstance() {
//singleton如果为空,则说明之前没有new过对象,否则直接返回
if(singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}