成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不是我看不起你?我猜你只知道兩種單例模式

開發 前端
單例模式保證了系統內存中該類只存在一個對象,節省了系統資源,對于一些需要頻繁創建銷毀的對象, 使用單例模式可以提高系統性能。

定義

單例設計模式,就是采取一定的方法保證在整個的軟件系統中,對某個類只能存在一個對象實例,并且該類只提供一個取得其對象實例的方法(靜態方法)。

使用場景

  • 對于一些需要頻繁創建銷毀的對象
  • 重量級的對象
  • 經常使用到的對象
  • 工具類對象
  • 數據源
  • session

單例模式八種方式

餓漢式(靜態常量)

/**
* 餓漢式(靜態常量)
* 優勢:簡單,避免多線程的同步問題
* 劣勢:無懶加載,內存浪費
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton1 {
// 私有化構造方法
private Singleton1(){}

// 靜態常量
private static final Singleton1 singleton1 = new Singleton1();

// 對外提供公共方法
public static Singleton1 getSingleton1(){
return singleton1;
}
}

分析

  • 優勢:簡單,避免多線程的同步問題
  • 劣勢:無懶加載,內存浪費

餓漢式(靜態代碼塊)

/**
* 餓漢式(靜態代碼塊)
* 優勢:簡單,避免多線程的同步問題
* 劣勢:無懶加載,內存浪費
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton2 {
// 私有化構造方法
private Singleton2(){}

private static final Singleton2 singleton2;

// 靜態代碼塊
static {
singleton2 = new Singleton2();
}

// 對外提供公共方法
public static Singleton2 getSingleton2(){
return singleton2;
}
}

分析

  • 優勢:簡單,避免多線程的同步問題
  • 劣勢:無懶加載,內存浪費

懶漢式(線程不安全)

/**
* 懶漢式(線程不安全)
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton3 {
// 私有化構造方法
private Singleton3(){}

// 內部屬性
private static Singleton3 singleton3;

// 對外提供公共方法
public static Singleton3 getSingletons(){
if(singleton3 == null){
singleton3 = new Singleton3();
}
return singleton3;
}
}

分析

  • 優勢:起到了懶加載的效果 不會造成內存浪費
  • 劣勢:線程不安全 不推薦這種方式的

懶漢式(同步方法)

/**
* 懶漢式(同步方法)
* 優勢:解決了線程同步問題
* 劣勢:使用synchronized同步關鍵字,性能太低
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton4 {
// 私有化構造方法
private Singleton4(){}

// 內部屬性
private static Singleton4 singleton4;

// 對外提供公共方法
public static synchronized Singleton4 getSingleton4(){
if(singleton4 == null){
singleton4 = new Singleton4();
}
return singleton4;
}
}

分析

  • 優勢:解決了線程安全問題
  • 劣勢:效率太低

懶漢式(同步代碼塊)

/**
* 懶漢式(同步代碼塊)
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton5 {
// 私有化構造方法
private Singleton5(){}

// 內部屬性
private static Singleton5 singleton5;

// 對外提供公共方法
public static Singleton5 getSingleton5(){
if (singleton5 == null){
synchronized (Singleton5.class){
singleton5 = new Singleton5();
}
}
return singleton5;
}
}

分析

  • 優勢:起到了懶加載的效果 不會造成內存浪費
  • 劣勢:線程不安全 不推薦這種方式的

雙重檢查鎖方式

/**
* 雙重檢查鎖機制
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton6 {
// 私有化構造方法
private Singleton6(){}

// 內部屬性
private volatile static Singleton6 singleton6;

// 對外提供公共方法
public static Singleton6 getSingleton6(){
if (singleton6 == null){
synchronized (Singleton6.class){
if(singleton6 == null){
singleton6 = new Singleton6();
}
}
}
return singleton6;
}
}

分析

  • 實現了懶加載,效率很高,解決了線程安全

靜態內部類方式

/**
* 靜態內部類
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
public class Singleton7 {
// 私有化構造方法
private Singleton7(){}

// 內部類
private static class SingleInstance{
public static final Singleton7 singleton7 = new Singleton7();
}

// 對外提供公共方法
public static Singleton7 getSingleton7(){
return SingleInstance.singleton7;
}
}

分析

  • 不會出現線程安全問題 JVM來幫我們保證了線程的安全性
  • 利用靜態內部類的特點,效率也很高
  • 實際開發中推薦使用的

枚舉方式

定義單例對象

/**
* @desc:
* @author:liyajie
* @createTime:2022/2/11 10:25
* @version:1.0
*/
public class Singleton {

public void hello(){
System.out.println("hello");
}
}

定義枚舉實例化單例對象

/**
* 枚舉方式
* @author:liyajie
* @createTime:2022/2/10 15:50
* @version:1.0
*/
enum Singleton8 {
// 相當于public static final Singleton8 INSTANCE;
// 保證了枚舉實例只能被實例化一次
INSTANCE;

// 定義單例變量
private Singleton singleton;

// 枚舉構造方法,該構造方法是private,執行構造方法的時候,同時創建我們的單例對象
Singleton8() {
singleton = new Singleton();
}

// 對外提供公共方法
public Singleton getSingleton() {
return singleton;
}
}

使用方法

Singleton8.INSTANCE.getSingleton()即可獲取我們的單例對象了。

分析

  • 簡單,避免了線程安全問題
  • 實際開發中推薦使用的

總結

單例模式保證了系統內存中該類只存在一個對象,節省了系統資源,對于一些需要頻繁創建銷毀的對象, 使用單例模式可以提高系統性能

當想實例化一個單例類的時候,必須要記住使用相應的獲取對象的方法,而不是使用new

單例模式推薦使用的方法有內部靜態類方式和枚舉方式

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2018-04-03 15:38:07

Java單例模式模式設計

2020-04-27 08:31:29

單例模式Python軟件設計模式

2020-12-17 08:56:51

單例模式JVM

2012-05-11 09:13:28

程序員開發者

2021-01-06 08:48:35

CSS 命名模塊

2019-04-30 15:10:42

Python調試工具編程語言

2012-03-28 22:12:00

游戲

2012-03-26 15:08:22

我畫你猜

2015-07-21 10:09:13

iOSCoreLocatio

2021-08-05 15:04:14

消息隊列后端

2022-08-08 20:33:12

VolatileJVM

2024-11-08 08:34:59

RocketMQ5.Remoting通信

2020-04-27 10:34:23

HTTPDNSDNS網絡協議

2011-02-21 16:47:03

Integer

2022-02-15 20:08:41

JDKJavaWindows

2023-12-05 08:20:05

單例模式Python

2012-11-05 10:18:21

云存儲你畫我猜云服務

2020-11-18 08:15:39

TypeScript設計模式

2009-11-06 12:59:56

WCF服務通信

2024-10-18 14:29:28

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线视频二区 | 国产 日韩 欧美 在线 | 欧美一区在线视频 | 天天干天天插天天 | 中文字幕成人在线 | 伊人狠狠操 | 久久99久久99 | 亚洲精品1区2区3区 91免费看片 | 成人精品视频99在线观看免费 | 欧美国产日韩在线观看 | 国产欧美一区二区在线观看 | 国产午夜精品一区二区三区四区 | 亚洲综合二区 | 免费毛片网 | 99久久国产 | 天堂男人av | 欧美国产日韩在线观看 | 91九色视频| 精品美女视频在线观看免费软件 | 亚洲狠狠丁香婷婷综合久久久 | 成人综合视频在线 | 国产一区二区电影 | 久久精品在线 | 亚洲视频一区二区三区四区 | 亚洲精品视频一区二区三区 | 7777精品伊人久久精品影视 | 久久99视频精品 | 中文字幕av亚洲精品一部二部 | 毛片在线免费 | 久久一二| 99精品网 | 成人免费网视频 | 精品一区二区电影 | 欧美日韩在线一区二区 | 亚洲成av人片在线观看无码 | 亚洲www啪成人一区二区 | 视频一区二区国产 | 人人99 | 日日干日日 | 亚州av在线 | 国产精品永久免费视频 |