目的:保证一个类只有一个单一的实例

好处:1.在资源共享的情况下,避免由多个操作而导致的资源消耗;2.提供可变数目的实例。

标准的单例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace SinglePattern
{
public class SingleClass
{
private static SingleClass instance = null; /// <summary>
/// 构造函数
/// </summary>
protected SingleClass()
{ } public static SingleClass GetInstance()
{
if (instance == null)
{
instance = new SingleClass();
}
return instance;
}
}
}
 

上述是一个标准的单例,如果需要有多个线程访问,可能会产生多个实例,因此,此处需要加上锁,以保证同一时间只能有一个线程访问:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace SinglePattern
{
public class SingleClass
{
// 静态实例变量
private static SingleClass instance = null;
// 互斥锁
private static object objlock = new object(); /// <summary>
/// 受保护的构造函数
/// </summary>
protected SingleClass()
{ } public static SingleClass GetInstance()
{
lock (objlock)
{
if (instance == null)
{
instance = new SingleClass();
}
return instance;
}
}
}
}
优化下,保证一个窗口只能启动一个实例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading; namespace SinglePattern
{
public class SingleClass
{
// 静态实例变量
private static SingleClass instance = null;
/// <summary>
/// 受保护的构造函数
/// </summary>
protected SingleClass()
{ } public static SingleClass GetInstance()
{
// 进程同步
Mutex mutex = new Mutex();
mutex.WaitOne();
if (instance == null)
{
instance = new SingleClass();
}
mutex.Close();
return instance;
}
}
}

asp.net单例模式的更多相关文章

  1. asp.net—单例模式

    一.单例模式是什么? 定义:确保一个类仅仅能产生一个实例,并且提供一个全局访问点来获取该实例. 二.单例模式怎么用? class SingleCase { public string Name{get ...

  2. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  3. 在ASP.NET Web API中使用OData的单例模式

    从OData v4开始增加了对单例模式的支持,我们不用每次根据主键等来获取某个EDM,就像在C#中使用单例模式一样.实现方式大致需要两步: 1.在需要实现单例模式的导航属性上加上[Singleton] ...

  4. asp.net中WinForm使用单例模式示例

    例如在Windows应用程序中用下面代码打开一个窗体: 代码如下 复制代码 private void button1_Click(object sender, EventArgs e){ (new A ...

  5. Asp.Net 设计模式 之 “特殊”的单例模式

    特殊的单例模式 要点在这里,提前预览: public SingleDemo() { name = "yy"; age = 20; //特殊的单例,this指代得失当前的Single ...

  6. Asp.Net 设计模式 之 单例模式

    一.设计目的:让项目中只显示一个实例对象 二.设计步骤: 创建一个类: 构建类类型静态变量: 定义返回值类为单例类型的静态方法: 判断静态变量instance是否为空:如果为空,就创建实例,然后给单例 ...

  7. C#工具:ASP.NET MVC单例模式(懒汉)实现文件上传

    1.SingletonConfigRead帮助类 using System; using System.Collections.Generic; using System.IO; using Syst ...

  8. ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...

  9. 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的

    我们在<服务器在管道中的"龙头"地位>中对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了介绍,为了让读者朋友们对管道中的服务器具有更 ...

随机推荐

  1. Getting the Device GUID

    Sometime you may want to uniquely identify a Windows Phone, such as when you are implementing push n ...

  2. Hibernate提供的内置标识符生成器

    Hibernate提供的内置标识符生成器 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录.Hibernate使用OID(对象标识符)来统一两者之 ...

  3. Qt 控件随窗口缩放

    在Qt的界面设计中,我们有时候希望窗口在最大化的时候,上面的控件也跟着缩放,那么我们就需要调整控件的SizePolicy属性,关于这个属性的讲解请参见我之前的博客Qt SizePolicy 属性,由于 ...

  4. [CareerCup] 17.14 Unconcatenate Words 断词

    17.14 Oh, no! You have just completed a lengthy document when you have an unfortunate Find/Replace m ...

  5. NVelocity+Bootstrap tab控件 异常之

    异常信息:Encountered "tings" at line 54, column 55.Was expecting one of:   "(" ...   ...

  6. 繁简体 互转 js

    html: <script type="text/javascript" src="/js/s2t.js"></script><s ...

  7. 使用裸设备配置Oracle ASM实例一例

    1.查看当前磁盘 [root@std u01]# fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders Units = cylin ...

  8. iOS 如何通过CocoaPods添加第三方框架

    一  先安装Ruby环境: http://ruby-china.org/wiki/install_ruby_guide 在安装的时候,若是出现: 1.You don't have write perm ...

  9. 4s使用iOS 8的一些真實感受

    iPhone永遠離不開史上手機的爭論!你是否也在用呢? 今年iPhone 6/6Plus的發佈和上市可以說是振奮人心,大螢幕的升級.圓潤的外觀改變.全新的iOS 8系統,都是極具吸引力的.作為一名互聯 ...

  10. 对struct和class使用大括号初始化的测试

    #include <iostream> using namespace std; struct struct1{ /* struct1(){ cout<<"this ...