Java设计模式-单例设计模式(饿汉、饱汉)详细解析

先言:
/*
单例设计模式:保证一个类在内存中只有一个对象(设置静态是关键!)。

模式:模式就是解决 一类 问题的固定步骤 。

软件行业中23种设计模式:
单例设计模式
模板设计模式
装饰者设计模式
观察者设计模式
工厂设计模式

单例设计模式的步骤:

饿汉单例设计模式
1. 私有化构造函数。(别人找不到构造函数,被人再new就创建不了该对象:别人一个对象都创建不了了)
2. 声明本类的引用类型变量,并且使用该变量指向本类对象。(别人不能创建,内部我自己创建)
3. 提供一个公共静态的方法获取本类的对象。

懒汉单例设计模式:
1. 私有化构造函数。
2. 声明本类的引用类型变量,但是不要创建对象,
3. 提供公共静态 的方法获取本类 的对象,获取之前先判断是否已经创建了本类 对象
,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,
然后再返回。

推荐使用: 饿汉单例设计模式。 因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。
*/

//饿汉单例设计模式 —-> 保证Single在在内存中只有一个对象。
class Single{

//私有化构造函数
private Single(){}
/*为了保证该对象在内存中只有一个!那么反过来说,不就是有若干用户只能调用这个一个对象吗!?
有共享对象的意思,那么自然就是static修饰啦!静态本身不就是在若干类中共享资源的意思吗,用在这里漂亮!!
*/  
//声明本类的引用类型变量,并且使用该变量指向本类对象
private static  Single s = new Single();//如果是成员变量,一般是封装起来的

//必须提供一个 公共静态 的方法获取本类的对象
public  static  Single getInstance(){
    return s;
}

}

//懒汉单例设计模式 —-> 保证Single在在内存中只有一个对象。

class Single2{

//声明本类的引用类型变量,不创建本类的对象
private static Single2 s;

//私有化了构造函数
private Single2(){}
public static Single2 getInstance(){
    if(s==null){
        s = new Single2();//此处容易出现线程安全问题:因cpu的抢夺,创建多个对象
    }
    return s;
}

}
//练习
//1.饿汉单例模式
class Single3{

//1.私有化构造函数
private Single3(){}
//2.内部自己创建对象,且在内存中只有一个(static是关键)
private static Single3 s3  = new Single3();
//3.必须创建 公共静态 方法来返回对象
public static Single3 getInstance(){
    return s3;
}

}

//2.饱汉单例设计模式
class Single4{

//1.私有化构造函数
private Single4(){}
//2.内部自己创建对象,且在内存中只有一个(static是关键),不在此处new对象
private static Single4 s4;
//3.必须创建 公共静态 方法来返回对象(此处判断,s4为null 就new)
public static Single4 getInstance(){
    if(s4==null){
        s4 = new Single4();
    }
    return s4;  
}

}

class Demo5 {

public static void main(String[] args) 
{
    Single4 s1 = Single4.getInstance();
    Single4 s2 = Single4.getInstance();
    System.out.println("是同一个对象吗?"+ (s1==s2));
}

}
附截图:
Java设计模式-单例设计模式(饿汉、饱汉)详细解析_第1张图片

你可能感兴趣的:(Java,第三方登录和支付专栏)