单例(Singleton)设计模式

版权声明:版权所有,翻印必究,哈哈哈 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;
	}

输出结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GoSantiago/article/details/88416424