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(序号) ...
随机推荐
- cocos2d-x-3.0 的改变,由于变得太多,一点点累积吧!
1.cpp 改成 Point 2.setIsRelativeAnchorPoint() 改成 ignoreAnchorPointForPosition() 3.Layer::create 图 ...
- Rails: No such file or directory - getcwd
这个的意思就是你从一个删除的目录里面运行实例:rails s
- 字节对齐导致的iOS EXC_ARM_DA_ALIGN崩溃
本文原链接: http://www.cnblogs.com/zouzf/p/4455167.html 先看一下这个链接:http://www.cnblogs.com/ren54/archive/201 ...
- JS - Object and Property的删除用法
在JS中,Object和Property的删除用法: var myObject = {name:'jimmy', age:12, height:123} delete myObject["j ...
- C primer plus 练习题 第五章
1. #include <stdio.h> #define MINU 60 int main() { int minute, hour, m; printf("请输入分钟:&qu ...
- Android JNI框架图
- 实例学习Backbone.js(一)
前面有两篇文章介绍了Backbone的model.collection和view,那么接下来我想用一个完整的Demo来记录我学习的过程, 单页操作,实现数据的增删改,后台使用json做数据库,通过re ...
- ux.plugin.ConTpl 模版元素监听扩展
/* *tpl模版加入按钮 *<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-s ...
- Qt编写自定义控件二动画按钮
现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...
- 译:在ASP.NET中如何对cookies进行加密和解密
译文地址:http://www.codeproject.com/Tips/872826/Encrypt-Decrypt-Cookies-in-ASP-NET 源代码:http://files.cnbl ...