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);
} }
}

最新文章

  1. [个人论文]一种基于GPU并行计算的MD5密码解密方法
  2. ECMAScript
  3. 微信iphone7、 ios10播放视频解决方案 2016.11.10
  4. js jQuery笔记
  5. svn钩子(hooks)
  6. wikioi 3116 高精度练习之加法
  7. python---pyc pyo文件详解
  8. Jordan Lecture Note-5: Kernels
  9. SGU 230. Weighings (拓扑排序)
  10. Spring.Net+NHibernate+asp.net mvc + easyui
  11. Windows Phone 启动器
  12. 译者序(Core Data 应用开发实践指南)
  13. IE浏览器-官网下载地址
  14. 【java设计模式】【创建模式Creational Pattern】建造模式Builder Pattern
  15. es6学习笔记--let和const
  16. [Swift]LeetCode9. 回文数 | Palindrome Number
  17. $m$ 整除 $10^k$ 的一个充分条件
  18. Xadmin 组件基础使用以及全局配置
  19. BGP - 2,BGP报文和BGP状态
  20. 小学生都能写智能语音助手了,我这颗转战AI的心要何去何从?

热门文章

  1. Integer to Boolean strange syntax
  2. 深入理解Java 8 Lambda(语言篇)
  3. 教你怎么调用Gitlab API
  4. 2017-12-01 中英文代码对比之ZLOGO 4 &amp; LOGO
  5. importToMbtiles
  6. Django之form总结
  7. weblogic系列漏洞整理 -- 1. weblogic安装
  8. 找Maven --&gt; pom.xml --&gt; groupId和artifactId的网站
  9. 详细理解平衡二叉树AVL与Python实现
  10. pandas的resample重采样