单例模式(Singleton)
在简单工厂模式中讲到存放数据库连接信息,这里将怎样获取连接信息,通常一个应用程序中连接信息应该是全局唯一的,因此,我们想到单例模式。下面我就将怎样写一个单例模式的例子来获取数据库连接信息。简单,我相信大家都能看得懂,我就不再赘述了。代码如下:
(1)存放连接信息的XML文件结构
1 2 3 4 5 6 7 8 9 10 11 12 13 | <? xml version="1.0" encoding="utf-8" ?> < ConnInfos > < ConnInfo > < Name >HR</ Name > < Type >Oralce</ Type > < ConnString >Data Soure=;user=;password=;</ ConnString > </ ConnInfo > < ConnInfo > < Name >Main</ Name > < Type >SqlServer</ Type > < ConnString >Data Source=;Initial Catalog=;Integrated Security=True</ ConnString > </ ConnInfo > </ ConnInfos > |
(2)获取连接信息类别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | public class ConnManager { //存放连接信息 private static Hashtable _connData = Hashtable.Synchronized( new Hashtable()); //连接管理者实例 private static ConnManager _instance = new ConnManager(); private const string Default_Name = "MAIN" ; //默认连接名称 private const string File_Name = @"C:\Conn.xml" ; //私有构造函数,防止实例化 private ConnManager() { LoadData(); //载入数据 } private void LoadData() { BufferedStream bs = null ; try { bs = new BufferedStream( new FileStream(File_Name, FileMode.Open, FileAccess.Read)); XmlDocument xd = new XmlDocument(); xd.Load(bs); XmlNodeList xnl = xd.GetElementsByTagName( "ConnInfo" ); if (xnl.Count > 0) { foreach (XmlNode xn in xnl) { if (xn.HasChildNodes) { XmlNode n1 = xn.SelectSingleNode( "Name" ); XmlNode n2 = xn.SelectSingleNode( "Type" ); XmlNode n3 = xn.SelectSingleNode( "ConnString" ); string name = n1 != null ? n1.FirstChild.Value : String.Empty; string type = n2 != null ? n2.FirstChild.Value : String.Empty; string connStr = n3 != null ? n3.FirstChild.Value : String.Empty; _connData.Add(name.ToUpper(), new ConnInfo(name, type, connStr)); } } } bs.Close(); } catch { bs.Close(); } } public int Count { get { return _connData.Count; } } public static ConnManager GetInstance() { return _instance; } public static ConnInfo GetConnInfoByName( string name) { string name = name.ToUpper(); if (_connData[name] != null ) { return _connData[name] as ConnInfo; } else { return null ; } } public static ConnInfo GetConnInfo() { return GetConnInfoByName(Default_Name); } } |
分类:
03 .NET技术
标签:
单例模式
Known 是基于 Blazor 轻量级、跨平台、低代码、易扩展的插件开发框架。
源码:https://gitee.com/known/Known
源码:https://github.com/known/Known
如果对您有帮助,点击⭐Star⭐关注 ,感谢支持开源!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!