/**
* 单例模式-饿汉式
*/
public class Singleton
{
// 在定义的时候就初始化_instance,
private static Singleton _instance = new Singleton(); // 够造函数必须是私有的,不能被外部直接调用。
private Singleton()
{
} // 暴露给外部,提供实例。
public static Singleton getInstance()
{
return _instance;
}
}
    /**
* 单例模式-懒汉式(一)
*/
public class Singleton
{
private static Singleton _instance; // 够造函数必须是私有的,不能被外部直接调用。
private Singleton()
{
} // 暴露给外部,提供实例。
public static Singleton getInstance()
{
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}
    /**
* 单例模式-懒汉式(二)
*/
public class Singleton
{
private static Singleton _instance;
private static readonly object synchronized = new object();
// 够造函数必须是私有的,不能被外部直接调用。
private Singleton()
{
} // 暴露给外部,提供实例。
public static Singleton getInstance()
{
if (_instance == null)
{
lock (synchronized) //加锁防止多线程
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
}
    /**
* 单例模式-懒汉式(四)
*/
public class Singleton
{
// 够造函数必须是私有的,不能被外部直接调用。
private Singleton()
{
} // 暴露给外部,提供实例。
public static Singleton getInstance()
{
return SingletonHolder._instance;
} // 静态内部内,实现延时加载
private static class SingletonHolder
{
public static Singleton _instance = new Singleton();
}
}
/*
*懒汉式加锁解决多线程安全问题
*/
public class Singleton
{
private static Singleton _instance;
private static readonly object syn = new object();
private Singleton() //构造函数设置private,不能被new,单例模式
{ }
public static Singleton CreateInstance()
{
if (_instance == null)
{
lock (syn) //加锁防止多线程
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
}
/*
*使用.NET4的Lazy<T>类型
*/
public sealed class Singleton
{
private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton()); public static Singleton Instance
{
get
{
return lazy.Value;
}
} private Singleton()
{
}
}
/*
*完全延迟加载实现(fully lazy instantiation)
*/
public sealed class Singleton
{
private Singleton()
{
} public static Singleton Instance
{
get
{
return Nested.instance;
}
} private class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
} internal static readonly Singleton instance = new Singleton();
}
}
/*
* 双重验证的线程安全实现
*/
public sealed calss Singleton
{
private static Singleton instance = null;
private static readonly object padlock = new object(); Singleton()
{
} public static Singleton Instance
{
get
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}

C#几种单例模式的更多相关文章

  1. 7、java实现的两种单例模式

    /* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public stat ...

  2. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法   单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...

  3. Java中的五种单例模式实现方法

    [代码] Java中的五种单例模式实现方法   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...

  4. java中的几种单例模式

    目前比较常见的有4种(DCL为懒汉模式的线程安全版本). 单例模式的实现一般需要满足以下条件: 1.构造方法私有化,实例属性私有化. 2.必须仅在类的内部完成实例的初始化过程. 3.提供公共静态方法, ...

  5. Core Java之7种单例模式

    初始化空 初始化创建 一把锁 两把锁 大专栏  Core Java之7种单例模式"headerlink" title="静态内部类">静态内部类 静态加载 ...

  6. Java中的五种单例模式

    Java模式之单例模式: 单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例. 特点: 1,一个类只能有一个实例 2 自己创建这个实例 3 整个系统都要使用这个实例 例: 在下面 ...

  7. python-元类的几种单例模式

    单例介绍: 单例即单个的实例,指的是同一个类实例化多次的结果都是指向同一个对象,用于节省内存空间 如果我们从配置文件中读取配置信息来进行实例化,在配置相同的情况下,就没必要重复产生对象浪费内存了. # ...

  8. Java连载54-两种单例模式、接口详解

    一.单例模式分为两种: (1)饿汉式单例:在类加载阶段就创建了一个对象. (2)懒汉式单例:用对对象的时候才会创建对象.(连载53中例子就是懒汉式) 饿汉式举例: package com.bjpowe ...

  9. C#中几种单例模式

    1.静态代码块 /// <summary> /// 静态代码块 /// 仅在第一次调用类的任何成员时自动执行 /// </summary> public class Singl ...

  10. python中几种单例模式的实现

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

随机推荐

  1. Hive中row_number()、dense_rank()、rank()的区别

    摘要 本文对Hive中常用的三个排序函数row_number().dense_rank().rank()的特性进行类比和总结,并通过笔者亲自动手写的一个小实验,直观展现这三个函数的特点. 三个排序函数 ...

  2. 50道Java集合经典面试题(收藏版)

    前言 来了来了,50道Java集合面试题也来啦~ 已经上传github: https://github.com/whx123/JavaHome 1. Arraylist与LinkedList区别 可以 ...

  3. PE文件介绍 (1)

    PE文件介绍 PE文件主要是windows操作系统下使用的可执行文件格式,PE文件是指32位的可执行文件也叫做PE32,64位可执行文件叫做PE+或者PE32+ PE文件格式 种类 主扩展名 可执行类 ...

  4. Remap 后的 USART1 不能发送数据

    最近在使用 STM32 的 USART1 时,遇到一点问题,记录一下. 如果 USART1 不是使用 PA9 和 PA10 作接收和发送引脚,而是 PB6 和 PB7,那么有一点就一定得注意了:此时 ...

  5. Idea 添加注释:类注释、方法注释(可获取参数)

    原文链接:https://blog.csdn.net/liqing0013/article/details/84104419 Idea 添加注释:类注释.方法注释 类注释 File–Setting–E ...

  6. mysql HAVING用法

    原文链接:https://www.cnblogs.com/mr-wuxiansheng/p/11188733.html having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记 ...

  7. 如何解析json格式的字符串

    package com.json; import java.util.ArrayList; import java.util.HashMap; import java.util.List; impor ...

  8. ZWave对COMAND CLASS的处理流程

    文章主题  在开发一个 ZWave Device 的过程中,对 COMAND CLASS(单词太长了,后面就简写为 CC 啦) 的处理是最基本.最重要的工作.这篇文章以最最简单的 CC:COMMNAD ...

  9. LeetCode 78,面试常用小技巧,通过二进制获得所有子集

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第47篇文章,我们一起来看下LeetCode的第78题Subsets(子集). 这题的官方难度是Medium,点赞 ...

  10. VS2017未安装MFC解决方法

    VS2017未安装MFC解决方法 https://blog.csdn.net/u010921682/article/details/89847395