C# 语法五 单例类、单例模式
2024-09-08 20:30:05
1.优点
只有一个实例
2.缺点
a)这个实例不能随时释放掉,占用资源。
b)每次使用,都要判断是否为空,增加消耗
3.适用场景
只能有一个实例的业务场景,例如:数据库连接对象(每次连接都是同一个连接)、打印(多次打印,但同时只能一个在打印)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
/// <summary>
/// 第一种:经典模式,每次都判空,增加消耗,这是缺点
/// </summary>
public class ClassStaticTest
{
private static ClassStaticTest instance; private ClassStaticTest()
{
} public static ClassStaticTest GetInstance()
{
if (instance == null)
{
instance = new ClassStaticTest();
} return instance;
} public int Age { get; set; }
public string Name { get; set; } public void DoSome()
{
Console.WriteLine(Age);
Console.WriteLine(Name);
} } /// <summary>
/// 第二种:多线程安全
/// </summary>
public class ClassStaticTest2
{
private static object obj = new object();
private static ClassStaticTest2 instance; private ClassStaticTest2()
{
} public static ClassStaticTest2 GetInstance()
{
//双重加锁
if (instance == null)
{
lock (obj)
{
if (instance == null)
{
instance = new ClassStaticTest2();
}
}
}
return instance;
} public int Age { get; set; }
public string Name { get; set; } public void DoSome()
{
Console.WriteLine(Age);
Console.WriteLine(Name);
} } /// <summary>
/// 第三种:CLR解决线程安全,当没有用到该类时,实例都存在,这是缺点
/// </summary>
public class ClassStaticTest3
{
private static readonly ClassStaticTest3 instance = new ClassStaticTest3(); private ClassStaticTest3()
{
} public static ClassStaticTest3 GetInstance()
{
return instance;
} public int Age { get; set; }
public string Name { get; set; } public void DoSome()
{
Console.WriteLine(Age);
Console.WriteLine(Name);
} }
}
最新文章
- [个人论文]一种基于GPU并行计算的MD5密码解密方法
- ECMAScript
- 微信iphone7、 ios10播放视频解决方案 2016.11.10
- js jQuery笔记
- svn钩子(hooks)
- wikioi 3116 高精度练习之加法
- python---pyc pyo文件详解
- Jordan Lecture Note-5: Kernels
- SGU 230. Weighings (拓扑排序)
- Spring.Net+NHibernate+asp.net mvc + easyui
- Windows Phone 启动器
- 译者序(Core Data 应用开发实践指南)
- IE浏览器-官网下载地址
- 【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern
- es6学习笔记--let和const
- [Swift]LeetCode9. 回文数 | Palindrome Number
- $m$ 整除 $10^k$ 的一个充分条件
- Xadmin 组件基础使用以及全局配置
- BGP - 2,BGP报文和BGP状态
- 小学生都能写智能语音助手了,我这颗转战AI的心要何去何从?