精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

三言兩語說透設計模式的藝術-單例模式

開發 前端
單例模式作為一種設計模式,由于具有明確的目的、簡單的結構和易于理解的特點,在軟件開發中使用頻率很高,在許多應用程序和框架中都有廣泛應用。

寫在前面

單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少系統中的資源開銷。

單例模式

單例模式的實現思路是:

  1. 構造函數需要被私有化,外部無法直接通過new來創建對象實例。
  2. 提供一個靜態的公有訪問點,用于獲取單例對象的實例。
  3. 通過判斷實例是否已經存在來決定創建或直接返回現有實例。

單例模式的要點:

  • 某個類只能有一個實例
  • 它必須自行創建實例
  • 它必須自行向整個系統提供整個實例

我們來看一下使用TypeScript實現單例模式的代碼示例:

class Singleton {
  // 私有靜態屬性,存儲唯一實例
  private static instance: Singleton;

  // 私有構造函數,防止外部實例化
  private constructor() {}

  // 向外部提供能夠共享訪問的唯一實例
  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }

    return Singleton.instance;
  }

  // 其他方法和屬性
}

const s1 = Singleton.getInstance(); 
const s2 = Singleton.getInstance();

console.log(s1 === s2); // true

上面代碼中,Singleton類的構造函數被private修飾,使其無法在類的外部通過new來創建實例。

getInstance方法首先會判斷實例是否存在,如果不存在才去新建實例,如果實例已存在則直接返回現有實例。這確保了整個程序中只會創建該類的一個實例。

測試代碼中,s1和s2實際上是獲取的是同一個實例對象。

圖片圖片

單例模式的優點:

  • 對唯一實例的受控訪問。
  • 由于單例對象存放在靜態變量中,所以可以直接通過類名訪問,簡單方便。
  • 可以避免對資源的重復占用。

單例模式的缺點:

  • 沒有抽象層,擴展困難。
  • 單例類的職責過重,違反單一職責原則。
  • 沒有接口,依賴具體實現,導致擴展性差。

Singleton單例:在單例類的內部實現只生成一個實例,同時提供一個靜態方法getInstance()方法,讓用戶可以訪問它的唯一實例;為了防止在外部對單例類實例化,它的構造函數可見性為private;在單例類內部定義了一個Singleton類型的靜態屬性instance,作為提供給外部共享訪問的唯一實例。

餓漢式單例類

餓漢式單例類:當類被加載時,靜態屬性instance會被初始化,此時類的私有構造函數會被調用,單例類的唯一實例將會被創建。

普通單例模式和餓漢式單例模式的區別:

  • 普通單例模式是在第一次調用getInstance方法時才創建實例對象。
  • 餓漢式是無論是否調用都會在類加載時就創建實例對象。

下面我們使用TypeScript代碼實現一個餓漢式單例:

class Singleton {
  private static instance = new Singleton();
  
  private constructor() {}

  public static getInstance() {
    return Singleton.instance;
  }
}

const s1 = Singleton.getInstance();
const s2 = Singleton.getInstance(); 

console.log(s1 === s2); // true

餓漢式單例由于在類加載時就完成了初始化,所以理論上它是線程安全的,在多線程環境下也能保證單例。

但餓漢式也有可能造成不必要的實例化,如果這個單例的實例對象較大,而客戶端又沒調用getInstance方法,那就會浪費內存。

懶漢式單例模式

其實懶漢式單例模式,就是前面提到的普通單例模式。

懶漢式單例模式實現代碼如下:

class Singleton {
  private static instance: Singleton;

  private constructor() {}

  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }

    return Singleton.instance; 
  }
}

但是,這種實現方式存在一個問題,就是在多線程環境下會存在安全隱患。

如果有兩個線程A和B,它們同時調用 getInstance 方法,并且實例還沒有被初始化,那么它們會同時執行 Singleton.instance = new Singleton();這行代碼。

這樣就會導致實際創建了兩個實例,違反了單例模式的初衷。

為了使懶漢式單例在多線程中也是安全的,我們可以對getInstance方法加鎖:

class Singleton {
  private static instance: Singleton;

  private constructor() {}

  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      // 加鎖
      lock()  

      if (!Singleton.instance) {
        Singleton.instance = new Singleton();
      }

      // 釋放鎖 
      unlock()
    }

    return Singleton.instance;
  }
}

這樣當一個線程進入該方法時,其它線程就只能等待,直到鎖被釋放后才能進入方法。

這就確保了單例實例的唯一性。這里的鎖機制可以使用互斥量mutex等各種鎖的實現。

以上是關于懶漢式單例線程安全性問題的一個補充說明。讓我們的單例模式實現更加健壯。

餓漢式單例與懶漢式單例類比較

  1. 實例化時機不同
  • 懶漢式是在第一次調用getInstance時才實例化Singleton對象
  • 餓漢式是在類加載時就實例化了Singleton對象
  1. 資源利用效率不同
  • 懶漢式更節約資源,按需實例化,如果一直沒有調用getInstance也不會實例化
  • 餓漢式不管是否需要都會實例化,如果長時間沒有使用就會浪費內存
  1. 多線程安全性不同
  • 餓漢式天然是多線程安全的,因為實例在類加載時就已經創建好了
  • 懶漢式需要額外的同步機制來保證多線程安全
  1. 使用場景不同
  • 懶漢式更適合實例化過程比較耗時或耗資源的情況
  • 餓漢式更適合實例化過程很快且確定會用到的情況

懶漢式相比餓漢式更加靈活,但需要處理多線程安全問題。餓漢式編寫簡單但不太高效。

在實際開發中,我們可以根據需求選擇合適的實現方式,也可以采用雙重校驗鎖等線程安全的懶漢式實現。

一種更好的單例實現方式

餓漢式單例類不能實現延遲加載,不管將來用不用,它始終占據內存;懶漢式單例類線程安全控制繁瑣,而且性能收到影響。對此,無論是餓漢式單例還是懶漢式單例都在一些問題,使用IoDH(Initialization on Demand Holder)可以結合兩者的優點,克服兩者的缺點實現性能和實現更優的單例模式。

IoDH是一種技術方案,它利用了類的靜態屬性來實現延遲加載和線程安全。要實現IoDH,只需在但李磊中增加靜態內部類即可,在該內部類中創建單例對象,再將該單例對象通過getInstance()方法返回給外部使用。

// 單例服務接口
interface SingletonService {
  doSomething(): void; 
}

// 單例服務類
class SingletonServiceImpl implements SingletonService {

  doSomething() {
    console.log('Doing something...');
  }

}

// IoC容器類
class IoCContainer {

  private singleton: SingletonService;

  constructor() {
    this.singleton = new SingletonServiceImpl();
  }

  getSingleton(): SingletonService {
    return this.singleton;
  }

}

// 測試代碼

const container = new IoCContainer();

const s1 = container.getSingleton();
const s2 = container.getSingleton();

console.log(s1 === s2); // true

詳細解析一下使用IoC容器實現單例模式的代碼:

  1. 定義了單例服務接口SingletonService,用于規范單例對象的操作。
  2. SingletonServiceImpl實現了該接口,作為單例對象的具體實現類。
  3. IoC容器類IoCContainer在內部持有SingletonService類型的成員變量singleton。
  4. IoC容器類的構造函數中會實例化這個singleton對象,確保全局只有這一個實例。
  5. getSingleton()方法用來返回這個singleton實例。
  6. 在測試代碼中,從IoC容器中獲取了兩次單例對象,并比較它們的引用是否相同。
  7. 運行結果證明兩次獲取的確是同一個對象引用,即單例。

這樣通過IoC容器管理單例的創建,可以實現:

  1. 把單例對象的創建和生命周期管理轉移到IoC容器。
  2. 外部代碼不需要關心單例內部的具體實現,只需要從容器中獲取實例即可。
  3. 符合單一職責原則,程序邏輯更清晰。
  4. 有利于代碼的可測試性,可以通過mock容器進行單元測試。
  5. 擴展性較好,如果要切換不同的單例實現,只需要調整容器中的對象創建即可。

總結

單例模式作為一種設計模式,由于具有明確的目的、簡單的結構和易于理解的特點,在軟件開發中使用頻率很高,在許多應用程序和框架中都有廣泛應用。

  1. 單例模式的主要優點包括:提供對唯一實例的受控訪問,由于全局只存在一個實例,因此可以節約系統資源;允許擴展為可變數量的實例,既節約資源又解決過度共享影響性能的問題。
  2. 單例模式的主要缺點包括:沒有抽象層導致擴展性差;違反單一職責原則,將實例化和業務邏輯混合在一起;在支持垃圾回收的運行時環境下可能導致狀態丟失。
  3. 使用單例模式的典型場景包括:系統只需要一個實例;客戶只能通過一個公共訪問點獲取實例;需要節約資源的頻繁創建銷毀對象。

總之,單例模式是一種利用率較高的設計模式,其限制實例個數的特點可以帶來節省資源的優勢,但也可能導致擴展性較弱以及與語言環境不夠匹配等問題。在軟件設計中,開發者需要權衡考慮系統的需求和優缺點,適當使用單例模式。

責任編輯:武曉燕 來源: 宇宙一碼平川
相關推薦

2023-08-04 07:26:55

工廠類集中化設計模式

2023-08-07 06:30:15

抽象工廠模式軟件設計模式

2023-08-08 20:13:36

設計模式原型模式

2023-08-15 11:07:37

適配器模式TypeScript

2023-08-05 13:31:20

工廠方法模式對象

2023-07-30 15:14:19

Koa蔥圈模型

2023-08-07 08:01:09

Vuewebpack開發

2023-08-02 08:01:14

柯里化反柯里化

2023-07-27 15:04:10

Node.js核心API

2021-02-01 10:01:58

設計模式 Java單例模式

2021-03-02 08:50:31

設計單例模式

2022-02-06 22:30:36

前端設計模式

2013-11-26 16:20:26

Android設計模式

2016-03-28 10:23:11

Android設計單例

2022-06-07 08:55:04

Golang單例模式語言

2015-09-06 11:07:52

C++設計模式單例模式

2024-02-04 12:04:17

2021-08-11 17:22:11

設計模式單例

2021-09-07 10:44:35

異步單例模式

2022-09-29 08:39:37

架構
點贊
收藏

51CTO技術棧公眾號

国产精品jizz在线观看麻豆| 精品久久一区二区| 一区二区视频在线播放| 精品久久久免费视频| 国产一区二区精品| 中文字幕精品久久久久| 免费黄视频在线观看| 国模冰冰炮一区二区| 亚洲色图一区二区三区| 精品日本一区二区三区| 中文字幕在线观看视频一区| 午夜性色一区二区三区免费视频 | 色悠悠久久综合网| 欧美xxxx少妇| 亚洲国产精品精华液2区45| 91久久偷偷做嫩草影院| 蜜臀99久久精品久久久久小说 | 亚洲午夜免费| 欧洲精品中文字幕| 国产主播自拍av| 欧美人xxx| 久久综合资源网| 97超碰在线播放| 免费在线不卡av| 99视频精品免费观看| 久久中文久久字幕| 国产激情av在线| 日韩成人动漫在线观看| 日韩一二三区视频| 手机在线国产视频| 国产电影一区二区三区爱妃记| 亚洲成av人影院| 大地资源网在线观看免费官网| melody高清在线观看| 91免费看`日韩一区二区| av色综合网| 91麻豆成人精品国产| 日韩av不卡一区二区| 欧美亚洲国产成人精品| 日韩精品成人在线| 影音国产精品| 欧美国产视频一区二区| caoporn91| 日韩中文字幕高清| 欧美jizz18性欧美| 北岛玲一区二区三区四区| 成人网址在线观看| 91传媒免费观看| 色戒汤唯在线观看| 一区二区三区欧美| 91免费视频黄| 欧美jizz18性欧美| 中文字幕亚洲欧美在线不卡| 日本一区视频在线播放| 国模吧精品人体gogo| 久久人人97超碰com| 久久久久资源| 神马久久高清| 久久久久久久综合狠狠综合| 欧美午夜精品久久久久久蜜| 酒色婷婷桃色成人免费av网| 久久久久久久综合日本| 婷婷久久五月天| porn视频在线观看| 国产精品国产三级国产普通话三级| 相泽南亚洲一区二区在线播放 | 四虎影院一区二区| 国产鲁鲁视频在线观看特色| 亚洲日本青草视频在线怡红院| 国产成人精品免费看在线播放 | 久久久精品高清| 亚洲电影二区| 日韩精品一区二区三区在线| 波多野结衣一二三区| 亚洲欧美成人vr| 一区二区欧美亚洲| 亚洲伦理一区二区三区| 国产综合欧美| 日本欧美中文字幕| 亚洲天堂2021av| 久久网一区二区| 国产精品久久久久一区二区三区厕所| 久久国产一区二区三区| 91插插插插插插| 亚洲黄色在线| 国产精品久久久久7777婷婷| 国产精品一区二区免费视频| 99久久久国产精品| 日韩欧美三级一区二区| а√天堂8资源在线官网| 国产精品视频第一区| 好吊色视频988gao在线观看| 在线天堂资源www在线污| 欧美专区在线观看一区| 中文字幕久久久久久久| 亚瑟一区二区三区四区| 少妇激情综合网| jizz亚洲少妇| 天堂精品中文字幕在线| 99久久伊人精品影院| 黄色av免费在线观看| 一区二区三区四区视频精品免费| 春日野结衣av| 电影一区二区三区久久免费观看| 国产丝袜一区二区| 精品99久久久久成人网站免费 | 亚洲男人天堂av网| 国产亚洲综合视频| 欧美a在线观看| 国产一区二区三区在线观看视频 | 一区二区不卡在线观看| 色呦呦呦在线观看| 欧美性色黄大片| 亚洲av成人精品一区二区三区 | 欧美一级视频在线播放| 欧美韩国日本| 亚洲欧美国产高清va在线播| 免费在线观看国产精品| 久久精品国产一区二区| 久久久久久国产精品免费免费| 成人福利片网站| 欧美亚洲综合色| 国产精品揄拍100视频| 国产精品chinese| 成人免费福利在线| avtt亚洲| 色婷婷精品久久二区二区蜜臀av| 激情av中文字幕| 久久精品免费一区二区三区| 国产精品91久久| av女名字大全列表| 亚洲福利视频三区| 无套内谢丰满少妇中文字幕| 中国免费黄色片| 免费一区二区| 97香蕉超级碰碰久久免费的优势| 成人av片网址| 久久精品五月天| 91首页免费视频| 日韩中字在线观看| 懂色av一区二区| 欧美国产日韩视频| 成人av一区二区三区在线观看| 自拍视频在线观看一区二区| 国产精品一区二区小说| 日韩免费av| 国产精品自产拍在线观看| 国产黄在线观看| 91久久精品网| 亚洲精品国产一区黑色丝袜| 视频一区欧美日韩| 日本精品国语自产拍在线观看| 伊人久久视频| 国产亚洲精品综合一区91| 中文字幕在线看人| 国产午夜精品理论片a级大结局| www.国产区| 欧美一级淫片| 成人黄色片网站| 成人在线免费看黄| 欧美mv和日韩mv的网站| 国产精品2020| 91一区一区三区| 中文字幕乱码人妻综合二区三区 | 亚洲国产精品人久久电影| 久久精品国产亚洲av麻豆色欲 | heyzo高清中文字幕在线| 亚洲第一区中文字幕| 毛片视频网站在线观看| 国产亚洲福利社区一区| 欧美女同在线观看| 欧美国产综合| 蜜桃精品久久久久久久免费影院| 素人啪啪色综合| 成人97在线观看视频| 亚洲国产欧美另类| 色综合久久中文字幕综合网| 国产高清视频免费在线观看| 国产成人一级电影| av天堂永久资源网| 欧美国产一区二区三区激情无套| 97超碰最新| 成人性生活av| 久久国产精品久久久久| 日韩欧美亚洲系列| 欧美精品色综合| 日韩精品国产一区二区| 国产精品久久一卡二卡| 人妻少妇偷人精品久久久任期| a91a精品视频在线观看| 亚洲国产精品一区在线观看不卡 | 国产一区啦啦啦在线观看| 国产在线视频在线| 国产一区二区三区电影在线观看| 成人午夜黄色影院| 天堂中文在线播放| 俺去啦;欧美日韩| 天天爱天天干天天操| 欧美日韩色综合| 日韩精品视频播放| 亚洲日本护士毛茸茸| 逼特逼视频在线观看| 免播放器亚洲一区| 欧美日韩精品在线一区二区| 午夜精品毛片| 免费看成人午夜电影| 久久在线观看| 国产精品户外野外| 好看的中文字幕在线播放| 日韩在线视频观看| 黄色毛片在线观看| 亚洲成人性视频| 国产视频手机在线| 欧美亚一区二区| 中国一级免费毛片| 一区二区三区四区av| 懂色av粉嫩av浪潮av| www.久久精品| 久久久久无码精品| 麻豆久久久久久| 性欧美极品xxxx欧美一区二区| 国产欧美日韩一区二区三区在线| 成人一区二区av| 91成人免费| 亚洲午夜精品福利| 精品久久网站| 欧美极品一区二区| 青青草久久爱| 精品久久中出| 福利片一区二区| 99在线国产| 视频亚洲一区二区| 92福利视频午夜1000合集在线观看| 欧美videos粗暴| 久久亚洲欧美国产精品乐播| 麻豆国产精品va在线观看不卡 | 亚洲第一页在线| 在线观看不卡的av| 欧美亚洲综合色| 午夜视频网站在线观看| 欧美午夜精品伦理| wwwxxx亚洲| 欧美日韩一区二区免费视频| 日本网站在线播放| 精品动漫一区二区三区| 国产午夜精品无码一区二区| 亚洲国产综合色| 日本熟妇色xxxxx日本免费看| 亚洲成人av一区| 日韩久久精品视频| 狠狠操狠狠色综合网| 国产又色又爽又黄的| 欧美午夜激情在线| 亚洲精品成人在线视频| 色综合亚洲欧洲| 波多野结衣爱爱| 欧美在线观看视频一区二区| 亚洲免费视频二区| 欧美日韩高清不卡| 97在线视频人妻无码| 日韩精品一区二区三区视频在线观看 | 国产亚洲二区| 亚洲盗摄视频| 亚洲一区二区三区免费观看| 亚洲一级淫片| 福利视频免费在线观看| 亚洲另类视频| 男女爽爽爽视频| 国产一区三区三区| 喷水视频在线观看| 国产午夜精品一区二区三区嫩草 | 成人免费视频网址| 婷婷视频一区二区三区| 国产一区二区在线网站| 少妇精品久久久| 中文字幕一区二区三区精彩视频 | 色天下一区二区三区| 日韩av电影免费在线| 一本一道久久a久久精品蜜桃| 又大又硬又爽免费视频| 久久久精品五月天| 中文字幕1234区| 99国产精品久久久久久久久久| 久久亚洲AV无码专区成人国产| 亚洲图片激情小说| 欧美福利视频一区二区| 欧美日韩亚洲另类| 蜜臀av午夜精品| 色偷偷av一区二区三区| 92久久精品| 国产免费一区二区三区在线能观看 | 天堂av中文在线| 国产精品成人品| 77成人影视| 一区二区三区精品国产| 亚洲人成免费| 99九九99九九九99九他书对| 91麻豆免费看| 青娱乐国产在线| 欧美亚洲国产一区二区三区| 人妻偷人精品一区二区三区| 色婷婷久久一区二区| 午夜伦理福利在线| 99久热re在线精品视频| 日韩欧美精品综合| 欧美成人一区二区在线观看| 国产精一品亚洲二区在线视频| 69精品无码成人久久久久久| 亚洲国产一区视频| 91激情在线观看| 亚洲少妇激情视频| 成人免费一区二区三区牛牛| 国产欧美精品xxxx另类| 蜜臀av免费一区二区三区| 久久亚洲国产成人精品无码区| 日本系列欧美系列| 国产精品无码一区二区三区免费 | 黄色www网站| 国产成人8x视频一区二区 | 91精品一区二区三区综合| 激情综合网俺也去| 91一区二区在线观看| 国产在线拍揄自揄拍无码视频| 777精品伊人久久久久大香线蕉| 成人高清免费观看mv| 欧美在线视频a| 精品无人区一区二区| 99国产精品白浆在线观看免费| 激情国产一区二区| 日本黄区免费视频观看| 欧美午夜免费电影| yourporn在线观看视频| 国产成人精品电影久久久| 欧美亚洲色图校园春色| a在线视频观看| av爱爱亚洲一区| 日韩欧美性视频| 日韩国产一区三区| 黄色在线网站噜噜噜| 精品国产乱码久久久久软件| 亚洲精品一二| 亚洲一区二区三区四区五区六区| 天天色综合天天| 午夜影院免费体验区| 51色欧美片视频在线观看| 亚洲高清极品| 日本新janpanese乱熟| 91视频观看免费| 东京热一区二区三区四区| 亚洲免费电影在线观看| 欧洲av不卡| 午夜精品区一区二区三| 免费国产亚洲视频| 天海翼在线视频| 日韩欧美国产精品| 99色在线观看| 久久涩涩网站| 日本美女一区二区三区| 国产精品精品软件男同| 欧美成人福利视频| yellow在线观看网址| 欧美成人蜜桃| 日本在线不卡视频| 色哟哟一一国产精品| 日韩视频免费观看高清完整版在线观看| 亚洲电影视频在线| 国产一区二区视频在线免费观看 | 亚洲综合另类小说| 午夜激情小视频| 国产精品日韩专区| 一区二区三区四区日韩| 香蕉视频免费网站| 在线亚洲一区二区| 美女免费久久| 国产日韩一区二区| 丝瓜av网站精品一区二区| 波多野结衣家庭教师在线观看 | 青青国产在线| 国产精品偷伦一区二区| 亚洲欧美亚洲| 人妻av无码一区二区三区| 欧美一级在线观看| 乱馆动漫1~6集在线观看| 亚洲精品视频一区二区三区| 粉嫩av亚洲一区二区图片| 黄色av一区二区| 色综合天天狠天天透天天伊人| 在线观看欧美理论a影院| 久久久久久久久久一区二区| 舔着乳尖日韩一区| 欧美精品电影| 久久久久久久有限公司| 国产乱人伦偷精品视频不卡| 国产精品suv一区| 欧美大片欧美激情性色a∨久久| 国产精品午夜一区二区三区| 亚洲成年人av| 欧美二区三区的天堂| 三上悠亚一区二区| 波多野结衣av一区二区全免费观看|