C#设计模式——单件模式(Singleton Pattern)
一、概述
在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例。这时就需要用到单件模式。
二、单件模式
单件模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。。
单件模式的结构图如下:
Singleton负责创建自己的唯一实例,并定义一个Instance方法允许客户访问该实例。
三、示例
先来看看最简单的单件模式实现例子。
1 class SimpleSingleton
2 {
3 private static SimpleSingleton _instance;
4
5 private SimpleSingleton()
6 {
7 }
8
9 public static SimpleSingleton Instance()
10 {
11 if (_instance == null)
12 {
13 _instance = new SimpleSingleton();
14 }
15 return _instance;
16 }
17 }
显然,这种实现方式并不是线程安全的,在多线程环境中可能会得到多个SimpleSingleton实例。要解决这一问题,可以使用双重否定的方式。首先创建一个Singleton类的私有静态变量 padlock。
private static readonly object _padlock = new object();
然后修改Instance方法。
1 if (instance==null)
2 {
3 lock (_padlock)
4 {
5 if (instance==null)
6 {
7 instance = new Singleton();
8 }
9 }
10 }
11 return instance;
在实际应用中,一般可以利用C#静态初始化的特性来实现线程安全的Singleton。
1 class ThreadSafeSingleton
2 {
3 private static ThreadSafeSingleton _instance = new ThreadSafeSingleton();
4
5 private ThreadSafeSingleton()
6 {
7 }
8
9 public static ThreadSafeSingleton Instance()
10 {
11 return _instance;
12 }
13 }
这种方法比较简单,但也有一个缺点,即无法实现延迟初始化。对此可以在Singleton类中创建一个嵌套类,利用嵌套类来实现延迟初始化,这里就不再赘述。
C#设计模式——单件模式(Singleton Pattern)的更多相关文章
- 设计模式 - 单件模式(singleton pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...
- 设计模式----创建型型模式之单件模式(Singleton pattern)
单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...
- 说说设计模式~单件模式(Singleton)
单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...
- 1.单件模式(Singleton Pattern)
意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.简单实现(多线程有可能产生多个实例) public class CommonSigleton { /// <summary& ...
- 单件模式Singleton来控制窗体被重复或多次打开
本文转载:http://blog.csdn.net/a0700746/article/details/4473796 一般在百度搜一下,会出来一下内容,看来很好用.Singleton很方便的一个用处就 ...
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
原文:乐在其中设计模式(C#) - 单例模式(Singleton Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 单例模式(Singleton Pattern) 作者:weba ...
- 设计模式(二)单件模式Singleton(创建型)
SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...
- 夜话JAVA设计模式之单例模式(单件模式Singleton)
单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点. 设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例. 下面来看金 ...
- 深入浅出设计模式——单例模式(Singleton Pattern)
模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号) ...
随机推荐
- 解决Electron加载带jquery的项目报错问题
<!-- Insert this line above script imports --> <script>if (typeof module === 'object') { ...
- css强制换行和超出隐藏实现
一.强制换行1 word-break: break-all; 只对英文起作用,以字母作为换行依据. 2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据. 3 ...
- Delphi Android程序启动过程
Delphi的Android程序是原生的程序,也就是NativeActivity.那么就需要先看一下NativeActivity的原理, 在AndroidManifest.xml文件里面指定入口act ...
- Mac上编译libimobiledevice库
0.准备工作: 使用brew或Mac Ports安装:libgnutls or openssl. libplist .libusb.libusbmuxd 1.下载代码: 下载地址:https://gi ...
- 关于Asp.Net MVC 中 UpdateModel 的未能更新***模型的 解决方案!
解决方案参考: http://blog.csdn.net/hudaijun/article/details/7293129 想法: 其实,不用UpdateModel,虽然笨些,但不会出什么古怪问题.当 ...
- WPF调用图片路径,或资源图片
一.加载本项目的图片WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源.其中较为常见的情况是用Uri加载图像.Uri表达式的一般形式为:协议+授权 ...
- Oracle-ARCGIS-SDE 数据整合遇到的问题
一. 近日在做全文检索,基础采用oracle text,版本是10g,做好管理页面后,有功能是删除索引,就是生成drop index的语句.没有想到这个全文检索的index这么直接弄还不行,经过这样删 ...
- viewpager的简单使用,以及ValueAnimator的用法示例
之前在网上看到一篇viewpager简单使用的例子程序,主要采用了上部标签button+中间指示作用的imageview+下部viewpager的结构,点击上部标签,或者滑动viewpager,均可以 ...
- SQL Server Profiler:使用方法和指标说明
SQL Server Profiler的中文意思是SQL Server事件探查,一个Sql的监视工具,可以具体到每一行Sql语句,每一次操作,和每一次的连接.感觉这个工具的作用还是很大的,给大家分享一 ...
- web app变革之rem(手机屏幕实现全适配)
以往web移动适配,常规写法是:media only screen @media only screen and (min-device-width: 320px){ //针对iPhone 3 } @ ...