/// <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;}
}
這樣做有什么好處?
?
單例模式實現
通過私有構造函數 +?
GetInstance()
?方法保證全局唯一實例使用?
lock
?確保多線程安全
核心功能
Login()
:驗證用戶憑據并更新登錄狀態LoginOut()
:清除當前登錄狀態用戶管理方法(Add/Delete/Change/Select)
狀態管理
LoginUser
?屬性記錄當前登錄用戶初始狀態為"未登錄"
數據庫依賴
通過?
UserSqlHelp
?類封裝所有數據庫操作在構造函數中初始化數據庫連接
線程安全
所有對單例實例的訪問都通過加鎖保護