如何使用單例模式保證全局唯一實例(復雜版本)

/// <summary>
/// 登錄管理類(單例模式),負責用戶登錄、注銷及用戶信息管理
/// </summary>
public class LoginMananger
{// 用于線程同步的鎖對象static object _lockObj = new object();// 單例實例(延遲初始化)static LoginMananger loginMananger = null;// 用戶數據庫操作幫助類ELMeasure.Model.UserSqlHelp userSql;/// <summary>/// 當前登錄用戶信息(只讀屬性)/// </summary>public UserInfo LoginUser { get; private set; }/// <summary>/// 私有構造函數(防止外部實例化)/// </summary>private LoginMananger(){// 初始化默認用戶狀態LoginUser = new UserInfo() { Name = "未登錄", Level = Model.RootLevel.None };// 創建數據庫連接幫助類并建立連接userSql = new ELMeasure.Model.UserSqlHelp();userSql.Connect();}/// <summary>/// 獲取單例實例(線程安全)/// </summary>/// <returns>LoginMananger的唯一實例</returns>public static LoginMananger GetInstance(){lock (_lockObj)  // 加鎖確保線程安全{if (loginMananger == null)loginMananger = new LoginMananger();  // 延遲初始化}return loginMananger;}/// <summary>/// 用戶登錄驗證/// </summary>/// <param name="user">用戶名</param>/// <param name="password">密碼</param>/// <returns>登錄成功返回true,否則返回false</returns>public bool Login(string user, string password){if (userSql.IsConnected)  // 檢查數據庫連接狀態{// 查詢用戶信息if (userSql.SelectUser(user, password, out UserInfo info)){// 更新當前登錄用戶信息LoginUser.Name = info.Name;LoginUser.Level = info.Level;return true;}elsereturn false;  // 用戶驗證失敗}elsereturn false;  // 數據庫未連接}/// <summary>/// 用戶注銷/// </summary>public void LoginOut(){if (LoginUser.Level != Model.RootLevel.None){// 重置用戶狀態為未登錄LoginUser.Name = "未登錄";LoginUser.Level = Model.RootLevel.None;}}/// <summary>/// 添加新用戶/// </summary>/// <param name="userInfo">用戶信息</param>/// <returns>操作成功返回true</returns>public bool AddUser(UserInfo userInfo){return userSql.AddUser(userInfo);}/// <summary>/// 刪除用戶/// </summary>/// <param name="userInfo">要刪除的用戶信息</param>/// <returns>操作成功返回true</returns>public bool DeleteUser(UserInfo userInfo){return userSql.DeleteUser(userInfo);}/// <summary>/// 修改用戶信息/// </summary>/// <param name="userInfo">修改后的用戶信息</param>/// <returns>操作成功返回true</returns>public bool ChangeUser(UserInfo userInfo){return userSql.ChangeUser(userInfo);}/// <summary>/// 獲取所有用戶列表/// </summary>/// <returns>用戶列表</returns>public List<UserInfo> SelectUser(){List<UserInfo> users = null;userSql.SelectUsers(out users);return users;}
}

這樣做有什么好處?

?

  1. 單例模式實現

    • 通過私有構造函數 +?GetInstance()?方法保證全局唯一實例

    • 使用?lock?確保多線程安全

  2. 核心功能

    • Login():驗證用戶憑據并更新登錄狀態

    • LoginOut():清除當前登錄狀態

    • 用戶管理方法(Add/Delete/Change/Select)

  3. 狀態管理

    • LoginUser?屬性記錄當前登錄用戶

    • 初始狀態為"未登錄"

  4. 數據庫依賴

    • 通過?UserSqlHelp?類封裝所有數據庫操作

    • 在構造函數中初始化數據庫連接

  5. 線程安全

    • 所有對單例實例的訪問都通過加鎖保護

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87967.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87967.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87967.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

瑞斯拜考研詞匯課筆記

學習視頻鏈接&#xff1a;瑞斯拜考研詞匯系統課-外刊50篇- 第一講_嗶哩嗶哩_bilibili Text 1 1.氣候危機讓普通人經歷了額外六周的高溫天氣。 The climate crisis caused the average person to experience six extra weeks of hot days. 2.碳排放是全球變暖的重要原因之一。 C…

SqlServer安裝后JDBC連接失敗——TCP/IP

朋友公司接了個項目&#xff0c;甲方BaBa用的數據庫是SqlServer 2022的Express版本&#xff0c;朋友讓我幫忙驗證下環境有沒有什么問題&#xff0c;軟件開發用的框架還是比較老的&#xff0c;spring的xml方式配置&#xff0c;用的c3p0的數據庫連接池&#xff0c;啟動項目連接池…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘datetime’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘datetime’問題 摘要 在日常Python開發中&#xff0c;我們常常需要通過pip install來安裝第三方包&#xff0c;但有時會在PyCharm的控制臺里遇到奇怪的ModuleN…

Windows 10 2016 長期服務版

系統介紹 Windows 10 2016 長期服務版。專為需要高度穩定性和最小功能變更的環境設計。它不僅適合專業領域&#xff0c;也是辦公環境的理想選擇。 系統特點 一、極致的穩定性 精簡的系統組件&#xff1a;移除許多現代應用&#xff0c;只保留基礎功能。 無強制功能更新&…

基于springboot的文件上傳系統:重新定義大文件傳輸的可靠性邊界

一、文件分塊上傳解析1、為什么傳統文件上傳已經無法滿足現代需求&#xff1f;在云原生時代&#xff0c;文件上傳不再是簡單的"選擇文件-點擊上傳"的過程。隨著視頻、設計圖、數據集等大文件的普及&#xff0c;傳統的單文件上傳方式面臨著諸多挑戰&#xff1a;網絡不…

系統學習Python——并發模型和異步編程:進程、線程和GIL

分類目錄&#xff1a;《系統學習Python》總目錄 在文章《并發模型和異步編程&#xff1a;基礎知識》我們簡單介紹了Python中的進程、線程和協程。本文就著重介紹Python中的進程、線程和GIL的關系。 Python解釋器的每個實例都是一個進程。使用multiprocessing或concurrent.futu…

【playwright篇】教程(十七)[html元素知識]

1 html中&#xff0c;button元素中的aria-describedby"tooltip-r1k"屬性&#xff0c;主要用來做什么&#xff1f;在 HTML 中&#xff0c;button 元素中的 aria-describedby"tooltip-r1k" 屬性主要用于提升網頁的可訪問性&#xff08;Accessibility&#xf…

Python: 正則表達式

正則表達式是處理文本數據的強大工具&#xff0c;Python通過re模塊提供了完整的正則表達式功能。本文將詳細介紹Python正則表達式的使用方法&#xff0c;包括基礎語法、高級技巧和re模塊API的詳細解析。一、正則表達式基礎1.1 什么是正則表達式正則表達式(Regular Expression)是…

pytest合并allure報告解決方案

背景 在執行自動化測試的過程中&#xff0c;為了實現自動化的高通過率&#xff0c;可能會反復的重試&#xff0c;直至大多數甚至全部用例執行通過&#xff0c;以此來需要人為分析的用例量&#xff0c;減少人力投入&#xff0c;提高執行效率&#xff1b; 在用例少或者資源消耗小…

Pr插件圖文安裝教程

Pr插件圖文安裝教程 Adobe Premiere Pro&#xff0c;簡稱Pr&#xff0c;是由Adobe公司開發的一款視頻編輯軟件。Adobe Premiere有較好的兼容性&#xff0c;且可以與Adobe公司推出的其他軟件相互協作。這款軟件廣泛應用于廣告制作和電視節目制作中&#xff0c;是視頻編輯愛好者…

[netty5: HttpObjectEncoder HttpObjectDecoder]-源碼解析

在閱讀該篇文章之前&#xff0c;推薦先閱讀以下內容&#xff1a; [netty5: HttpObject]-源碼解析[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源碼分析[netty5: ByteToMessageCodec & MessageToByteEncoder & Byte…

uniapp的navigator跳轉功能

接下來&#xff0c;我將圍繞一個常見的電商小程序來構建一系列連貫的使用場景。在這個過程中&#xff0c;我們將把 <navigator> 組件的所有關鍵屬性和方法都串聯起來&#xff0c;并詳細解釋它們在每個環節所扮演的角色和作用。 核心場景&#xff1a;構建一個電商小程序的…

v-for的用法及案例

目錄 一.v-for的用法 1.舉例1 2.舉例2 二.購物車案例 1.代碼 2.存在的問題&#xff1a;復選框錯位 3.解決方案&#xff1a; 賦值給key屬性一個唯一的值 一.v-for的用法 1.舉例1 <template><view><view v-for"(item,index) in 10" :key"…

BigQuery對象引用(ObjectRef)全面指南:一站式整合結構化與非結構化多模態數據分析

引言 企業需要同時管理有組織表格中的結構化數據&#xff0c;以及日益增長的非結構化數據&#xff08;如圖片、音頻和文檔&#xff09;。傳統上&#xff0c;聯合分析這些多樣化數據類型非常復雜&#xff0c;通常需要使用不同的工具。非結構化媒體通常需要導出到專門的服務進行…

【開源品鑒】FRP源碼閱讀

frp 是一款高性能的反向代理應用&#xff0c;專注于內網穿透&#xff0c;支持多種協議和 P2P 通信功能&#xff0c;目前在 GitHub 上已有 80k 的 star。本文將深入探討其源碼&#xff0c;揭示其背后的實現原理。1. 前言 frp 是一款高性能的反向代理應用&#xff0c;專注于內網…

day048-系統負載高排查流程與前后端分離項目

文章目錄 0. 老男孩思想1. 系統負載高排查流程1.1 進程/線程相關命令1.1.1 jps1.1.2 jstack1.1.3 jmap1.1.4 top -Hp pid 1.2 排查流程圖 2. 前后端分離項目2.1 項目說明2.2 負載均衡2.3 數據庫配置2.3.1 安裝數據庫服務2.3.2 配置數據庫環境 2.4 后端配置2.5 四層負載均衡配置…

Spring Boot 牽手EasyExcel:解鎖高效數據處理姿勢

引言 在日常的 Java 開發中&#xff0c;處理 Excel 文件是一個極為常見的需求。無論是數據的導入導出&#xff0c;還是報表的生成&#xff0c;Excel 都扮演著重要的角色。例如&#xff0c;在企業的財務管理系統中&#xff0c;需要將每月的財務數據導出為 Excel 報表&#xff0…

【ARM AMBA AXI 入門 21 -- AXI partial 訪問和 narrow 訪問的區別】

文章目錄 Overview一、定義區別二、AXI 信號層面對比三、舉例說明示例一:Partial Access示例二:Narrow Access四、硬件/系統處理角度五、AXI 總線接口信號舉例對比Partial Write 事務:Narrow Write 事務(32-bit Master on 64-bit Bus):六、總結對比表七,軟件判斷判斷 Pa…

使用Ideal創建一個spring boot的helloWorld項目

說明&#xff1a;本篇將介紹如何使用Ideal2024.2.1去創建一個spring boot的helloWorld項目&#xff0c;本篇將包含創建的詳細步驟以及spring boot項目的目錄結構說明&#xff0c;創建過程中的選項說明等。詳細步驟如下&#xff1a;第一步&#xff1a;點擊文件——新建——項目&…

國內Ubuntu訪問不了github等外網

各位小伙伴們&#xff0c;大家好呀。 大家是不是經常遇到訪問不了外網的情況呀。 在Ubuntu中可以這樣做。 訪問這個網站網站測速-Ping檢測-Trace查詢-Dig查詢-路由跟蹤查詢-tools.ipip.net&#xff0c; 對于github.com&#xff0c;在這個網站輸入github.com&#xff0c;會返…