设计模式之单例模式C#实现
2024-09-01 20:58:40
前言
单例模式是老生常谈的一种设计模式,同时它是最简单也是最容易被忽视的一种设计模式。
下面是一些个人看法:
(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;
}
}
}
最新文章
- Oracle 11g静默安装简明版
- Docker常见问题解决
- 【Java每日一题】20161031
- css中的position:relative和absolute 属性
- 每日Scrum--No.6
- c++ ifstream ofstream 文件流
- ubuntu安装体验
- hdu 4524 郑厂长系列故事——逃离迷宫 小水题
- ASP.NET MVC (Razor)开发
- Head First Servlet and JSP
- Linux_常用命令简单介绍(netstat,awk,top,tail,head,less,more,cat,nl)
- npm设置和查看仓库源
- wave
- 浅谈Spring MVC知识
- 查询和修改mysql最大连接数的方法
- Debian 版本历史
- 20145202马超 2016-2017-2 《Java程序设计》第5周学习总结
- SPARK - Execute Framework
- UIWebView 获取网页标题
- Java面试题:多继承
热门文章
- (一)OpenStack---M版---双节点搭建---基础环境配置
- linux bash shell编程之参数变量和流程控制。
- Mybatis日志体系
- myql数据库,sql横排转竖排以及竖排转横排,oracle的over函数的使用
- python_网络编程
- 2019-2020-12 20199317 《Linux内核原理与分析》 第十二周作业
- HBase(2) Java 操作 HBase 教程
- luogu P1031 均分纸牌
- Mybatis_多表关联查询_resultMap_集合对象_N+1方式实现
- Remember the Word (UVA-1402)