python 數據庫連接池,python單例模式數據庫連接池_《java設計模式》一文帶你了解單例模式

 2023-12-12 阅读 28 评论 0

摘要:寫在前面五一放假了,大家是不是因為疫情都減少了出門的頻率那?不出門我們就一起在家學習吧!下面就讓我們從一個問題出發,開始今天的文章吧。你的類有沒有“超生”(到處都是該類的實例)那,它是不是也需要“計劃生育”(只需要一個實例)啊&#x

寫在前面

五一放假了,大家是不是因為疫情都減少了出門的頻率那?不出門我們就一起在家學習吧!下面就讓我們從一個問題出發,開始今天的文章吧。你的類有沒有“超生”(到處都是該類的實例)那,它是不是也需要“計劃生育”(只需要一個實例)啊?什么你不會?沒事讓我來告訴你解決類“超生”的辦法,使用單例設計模式。下面讓我們來一起學習一下單例模式。

3a967b7e7f41457098cbfed43d2516f7.png

概述

什么是單例模式?

單例模式是創建類型中常用的一種設計模式。該模式下的類有且僅有一個實例。

優點

python 數據庫連接池。1、可以嚴格控制單例類的使用者怎樣以及何時訪問唯一的實例。
2、只有一個實例,可以節約系統資源,提高系統的性能,減輕GC的壓力。

凡事有利就要弊,單例模式也不可以濫用。

缺點

1、單例模式的擴展性很差,因為沒有抽象層。
2、單例模式在一定程度上違背了“單一職責原則”。

2a93565c7c9042414fa9c833d7951215.png

不可以將數據庫連接池對象設計為的單例類,如果共享連接池對象的程序過多會出現連接池溢出的問題。不可以使用反射,這樣會聲明出另一個實例。

創建方式

Java中哪些是單例的、1、餓漢式
提前創建好類的實例不需要等待創建的時間,直接就可以使用。

/** * 餓漢式(單例模式) */public class HungrySingleton {    // 私有構造方法  private HungrySingleton() {  }    // 創建一個實例  private static final HungrySingleton HUNGRY_SINGLETON_INSTANCE = new HungrySingleton();  /**   * 獲取實例的方法   */  public static HungrySingleton getHungrySingleton() {    return HUNGRY_SINGLETON_INSTANCE;  }}

該方式可能在還不需要此實例的時候就已經將創建出來了,沒有起到懶加載的效果。

2、使用靜態內部類
通過使用靜態內部類的方式優化上面的餓漢式,起到懶加載的效果。

/** * 使用靜態內部類完成單例模式 */public class HungrySingleton {  // 私有構造方法  private HungrySingleton() {  }  // 利用靜態類的加載時機實現懶加載  private static class InnerHungrySingleton{    private static final HungrySingleton HUNGRY_SINGLETON_INSTANCE = new HungrySingleton();  }  /**   * 獲取實例的方法   */  public static HungrySingleton getHungrySingleton() {    return InnerHungrySingleton.HUNGRY_SINGLETON_INSTANCE;  }}

3、懶漢式
在第一次使用時創建實例,使用時需要考慮線程安全問題。

/** * 懶漢式(單例模式) */public class LazySingleton {  // 私有構造方法  private LazySingleton() {  }  // 私有靜態屬性  private static LazySingleton lazySingletonInstance;  /**   * 獲取實例的方法   */  public static LazySingleton getLazySingleton() {    // 雙重判斷    if (null == lazySingletonInstance) {      synchronized (LazySingleton.class) {        if (null == lazySingletonInstance) {          lazySingletonInstance = new LazySingleton();        }      }    }    return lazySingletonInstance;  }}

該方式起到了懶加載的效果,并且也做了線程安全處理。

python冒泡排序。4、使用枚舉
利用枚舉的特性讓JVM來保證線程安全問題和單一實例的問題。

/** * 使用枚舉實現單例 */public enum SingletonEnum {  INSTANCE;  private People people;  SingletonEnum(){    people = new People();  }  public People getPeople() {    return people;  }  // 定義了一個內部類,為了方便代碼展示,也可以是一個獨立的類。  class People {  }}

使用枚舉有一個缺點是需要更多的內存空間。

今天的分享就到這里了,看在我五一放假還堅持分享的份上大家能不能給我點個贊啊?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194543.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息