单例设计模式(懒汉式+饿汉式)

版权声明:此文为本人所写,严禁版权侵占行为。如需转载请注明出处。 https://blog.csdn.net/Abby_lxf/article/details/88959901

设计模式: 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

懒汉式和饿汉式的区别:

          1、在类中创建实例对象时:1)饿汉式:直接进行对象的实例化  2)懒汉式:在下面的方法中进行判断,不到万不得已就不会进行对象的实例化,当判断条件为true时进行实例化,当为false时返回对象。

一、饿汉式

         1.解决的问题:使得一个类只能够创建一个对象
         2.如何实现?
                  通过四步来实现单例设计模式(饿汉式)

                  1)创建私有的构造器

                  2)在类的内部创建一个实例化对象并设置为抽象类

                  3)私有化此对象并通过公共的方法来调用

                  4)设置此方法为static(此公用的方法必须通过类来调用)

public class TestSingleton {
	public static void main(String[] args) {
		//s1和s2为同一个对象
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		System.out.println(s1 == s2);  //使用static时创建多个对象时,对象是一样的。词句根据对象的引用来判断和验证s1和s2是否为同一个对象。
	}

}
//只能创建Singleton的单个实例
class Singleton {

	// 1.私有化构造器,使得在类的外部不能够调用此构造器
	private Singleton() {

	}

	// 2.在类的内部创建一个类的实例
	private static Singleton instance = new Singleton();

	// 3.私有化此对象,通过公共的方法来调用
	// 4.(谁去调这个方法)此公用的方法只能通过类来调用,因此设置为static的,同时类的实例也必须是static
	public static Singleton getInstance() {
		return instance;  //返回的是对象
	}

}

二、饿汉式(可能存在线程安全问题)

分为四步实现单例设计模式

1)创建私有的构造器

2)在类的内部设置实例化对象并将其私有化,声明为static方法

3)通过公共的方法来调用

4)设置方法为static(此时方法必须通过类进行调用,设置static方法时就不能通过对象进行调用)

public class TestSingleton1 {
	public static void main(String[] args) {
		Singleton1 s1 = Singleton1.getInstance();
		Singleton1 s2 = Singleton1.getInstance();
		System.out.println(s1 == s2);
		
	}
}
class Singleton1{
	
	//1.私有化构造器
	private Singleton1() {
		
	}
	//2.在类的内部设置一个对象实例并将对象设置为私有。
	private static Singleton1 instance = null;
	
	//3.通过公共的方法区获取
	public static Singleton1 getInstance() {
		if(instance == null) {
			instance = new Singleton1();
		}
		return instance;
	}
}

猜你喜欢

转载自blog.csdn.net/Abby_lxf/article/details/88959901