版权声明:此文为本人所写,严禁版权侵占行为。如需转载请注明出处。 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;
}
}