前言

单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式。

下面是一些个人看法:

(1) 单例类需要保证自己的唯一性,同时也需要避免被继承,即需要使用sealed修饰;

(2) 饿汉式单例先创建好实例,懒汉式单例在需要的时候再创建实例,个人倾向于后者,因为单例模式一般管理着特定资源,懒汉式单例可以避免在不需要资源的时候也会创建实例;

(3) 懒汉式单例需要在多线程环境下保持唯一性,因此需要在创建实例时加锁,对私有实例做双重判空(加锁前、加锁后),避免创建多个实例;

(4) 对于资源依赖强的单例,需要使用Dispose模式(实现IDisposable接口)。

1、单例模式UML图

2、传统单例C#实现

public class Singleton
{
private static Singleton _instance; private Singleton()
{
} public static Singleton Instance
{
get
{
if (_instance == null)
{
_instance = new Singleton();
} return _instance;
}
}
}

3、演进单例C#实现

public sealed class Singleton
{
private static Singleton _instance;
private static readonly object LockHelper = new object(); private Singleton()
{
} public static Singleton Instance
{
get
{
if (_instance != null)
{
return _instance;
} lock (LockHelper)
{
_instance = _instance ?? new Singleton();
} return _instance;
}
}
}

最新文章

  1. Oracle 11g静默安装简明版
  2. Docker常见问题解决
  3. 【Java每日一题】20161031
  4. css中的position:relative和absolute 属性
  5. 每日Scrum--No.6
  6. c++ ifstream ofstream 文件流
  7. ubuntu安装体验
  8. hdu 4524 郑厂长系列故事——逃离迷宫 小水题
  9. ASP.NET MVC (Razor)开发
  10. Head First Servlet and JSP
  11. Linux_常用命令简单介绍(netstat,awk,top,tail,head,less,more,cat,nl)
  12. npm设置和查看仓库源
  13. wave
  14. 浅谈Spring MVC知识
  15. 查询和修改mysql最大连接数的方法
  16. Debian 版本历史
  17. 20145202马超 2016-2017-2 《Java程序设计》第5周学习总结
  18. SPARK - Execute Framework
  19. UIWebView 获取网页标题
  20. Java面试题:多继承

热门文章

  1. (一)OpenStack---M版---双节点搭建---基础环境配置
  2. linux bash shell编程之参数变量和流程控制。
  3. Mybatis日志体系
  4. myql数据库,sql横排转竖排以及竖排转横排,oracle的over函数的使用
  5. python_网络编程
  6. 2019-2020-12 20199317 《Linux内核原理与分析》 第十二周作业
  7. HBase(2) Java 操作 HBase 教程
  8. luogu P1031 均分纸牌
  9. Mybatis_多表关联查询_resultMap_集合对象_N+1方式实现
  10. Remember the Word (UVA-1402)