版权声明:版权所有,翻印必究,哈哈哈 https://blog.csdn.net/GoSantiago/article/details/88416424
所谓单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
如果我们要让类在虚拟机中只产生一个对象,我们必须首先将类的构造方法的访问权限设置为private,这样在类的外部就不能使用new关键字创建类的对象了,但是在类的内部仍可以产生该类的对象。因为在类的外部还无法得到类的对象,只能调用类的静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
创建单例模式有两种方式,分为懒汉式和饿汉式。
public class TestSingleton {
public static void main(String[] args) {
Singleton1 s1 = Singleton1.getInstance();
Singleton1 s2 = Singleton1.getInstance();
System.out.println(s1.toString());
System.out.println(s2.toString());
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
System.out.println(s3.toString());
System.out.println(s4.toString());
}
}
class Singleton1 {//饿汉式
//1.私有化构造器,使得在类的外部不能调用此构造器
private Singleton1(){
}
//2.在类的内部创建一个类的实例
private static Singleton1 instance = new Singleton1();
//3.私有化此对象,并且通过公共的方法来调用
//4.此公共的方法,只能通过类来调用,因此设置成static,同时类的实例也必须设置为static
public static Singleton1 getInstance(){
return instance;
}
}
class Singleton2 {//懒汉式,可能会出现线程安全问题
//1.私有化构造器,使得在类的外部不能调用此构造器
private Singleton2(){
}
//2.在类的内部创建一个类的实例
private static Singleton2 instance = null;
//3.私有化此对象,并且通过公共的方法来调用
//4.此公共的方法,只能通过类来调用,因此设置成static,同时类的实例也必须设置为static
public static Singleton2 getInstance(){
if(instance == null) {
instance = new Singleton2();
}
return instance;
}
输出结果如下: