一、單例模式
1.情景
連接字符串管理
2.好處
- 代碼簡潔:可全局訪問連接字符串。
- 性能優化:一個程序一個連接實例,避免反復創建對象(連接)和銷毀對象(連接)。
- 線程安全:連接對象不會被重復創建,從而避免并發沖突。
3.Demo
using System;
using SqlSugar;public class SqlSugarSingleton
{// 使用 Lazy<T> 來保證延遲初始化和線程安全//Lazy<T> 通過內部的機制確保在多線程環境下的安全性,而且在首次訪問時才會初始化對象實例,從而避免了重復創建和資源浪費。private static readonly Lazy<SqlSugarClient> lazyInstance = new Lazy<SqlSugarClient>(() =>{// 配置 SqlSugarClient 實例return new SqlSugarClient(new ConnectionConfig{ConnectionString = "Server=localhost;Database=TestDB;User Id=myuser;Password=mypassword;",DbType = DbType.MySql, // 根據你的數據庫類型選擇IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute});});// 獲取 SqlSugarClient 實例public static SqlSugarClient Instance => lazyInstance.Value;
}class Program
{static void Main(){// 獲取唯一的 SqlSugarClient 實例SqlSugarClient db = SqlSugarSingleton.Instance;// 示例查詢var result = db.Queryable<Student>().Where(s => s.Age > 18).ToList();Console.WriteLine($"查詢結果數量: {result.Count}");}
}// 假設我們有一個學生類,用于展示查詢操作
public class Student
{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }
}
二、簡單工廠模式
1.情景?
? ? ? ? 可由參數決定實例化哪個類,不同的類調用相同的方法有不同的效果。
2.好處
- 便于開發:無需知道具體類的實現細節,只需要通過入參實現想要的效果
- 擴展方便:若要增加或者修改,對抽象類的子類操作即可,不需要改客戶端代碼(Main函數)
- 簡單簡潔:減少了客戶端(Main函數)的復雜度,調用時簡潔大方。
3.代碼思路
- 抽象類和子類:寫一個抽象類(含抽象方法),再寫n個它的子類(及其父類抽象方法的實現)
- 工廠類:寫一個簡單工廠,由字符串決定要實例化的類
- 客戶端使用:先用簡單工廠創建對象,然后再用這個對象調用方法
4.Demo
using System;// 抽象產品類 (先寫一個抽象類,含有抽象方法)
public abstract class Product
{public abstract void Show();
}// 具體產品 A (再寫n個它的子類,及其父類抽象方法的實現)
public class ConcreteProductA : Product
{public override void Show(){Console.WriteLine("ConcreteProductA");}
}// 具體產品 B
public class ConcreteProductB : Product
{public override void Show(){Console.WriteLine("ConcreteProductB");}
}// 簡單工廠 (然后,寫一個簡單工廠,由字符串決定要實例化的類)
public class ProductFactory
{public static Product CreateProduct(string type){if (type == "A")return new ConcreteProductA();else if (type == "B")return new ConcreteProductB();elsethrow new ArgumentException("Invalid product type");}
}class Program
{static void Main(){//客戶端使用:先用簡單工廠創建對象,然后再用這個對象調用方法Product productA = ProductFactory.CreateProduct("A");productA.Show();Product productB = ProductFactory.CreateProduct("B");productB.Show();}
}