/**
* 单例模式-饿汉式
*/
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. 聊一聊高并发高可用那些事 - Kafka篇

    目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...

  2. iOS-MapKit的使用笔记

    对于地图和定位,苹果公司提供给了两个框架: MapKit:用于地图展示 Core Location :用于地理定位 这次总结MapKit:       同样,在使用MapKit时首先要导入头文件: 与 ...

  3. Promise相关学习

    what? Promise对象表示一个异步操作的最终状态(完成或失败),以及其返回的值 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/ ...

  4. TB6612FNG电机驱动模块

    TB6612FNG电机驱动模块 模块原理图 模块的使用 TB6612是双驱动,也就是可以驱动两个电机 下面分别是控制两个电机的IO口 STBY口接单片机的IO口清零电机全部停止, 置1通过AIN1 A ...

  5. [源码解析] GroupReduce,GroupCombine 和 Flink SQL group by

    [源码解析] GroupReduce,GroupCombine和Flink SQL group by 目录 [源码解析] GroupReduce,GroupCombine和Flink SQL grou ...

  6. Windows程序设计(1)

    1. Windows程序设计基础 1.1 代码风格 #include "stdafx.h" #include <windows.h> void Alert(int i) ...

  7. 0xC0000005: Access Violation -vc++6.0

    0xC0000005: Access Violation -vc++6.0 aps001,002,003创建的C:\SMW200DATA\DATA,内容是不一样的,不通用的.读取相关文件就会报错咯. ...

  8. CRC16冗余循环检测计算器-好用。modbus RTU

    开始使用 http://cht.nahua.com.tw/index.php?url=http://cht.nahua.com.tw/software/crc16/&key=Modbus,%2 ...

  9. 获取系统的IP地址

    获取linux主机的IP地址 问题描述 在很多软件配置过程中,都需要设置ID信息,通常我选择使用系统配置的eth0网卡的IP地址信息,比如salt-minion-id,在通过cobbler批量安装操作 ...

  10. HTML躬行记(1)——SVG

    <svg>是矢量图的根元素,通过xmlns属性声明命名空间,从而告诉用户代理标记名称属于哪个XML方言.在下面的示例中,为<svg>元素声明了宽度和高度(默认以像素为单位),其 ...