【设计模式】单例模式
来源:互联网 发布:日本留学英语 知乎 编辑:程序博客网 时间:2024/05/27 16:43
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类成为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
实现一:普通单例模式
using System;using System.Collections.Generic;using System.Text;namespace 单例模式{ class Singleton { private static Singleton instance; private Singleton() { } public static Singleton GetInstance() { if (instance == null) instance = new Singleton(); return instance; } } class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) Console.WriteLine("两个对象是相同的实例!"); Console.Read(); } }}
实现二:多线程时的单例模式,双重锁定
using System;using System.Collections.Generic;using System.Text;namespace 双重锁定单例模式{ class Singleton { private static Singleton instance; private static readonly object syncRoot = new object(); private Singleton() { } public static Singleton GetInstance() { if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } } class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) Console.WriteLine("两个对象是相同的实例!"); Console.Read(); } }}
实现三:静态初始化单例模式
C#与公共语言运行库提供的“静态初始化”方法,不需要开发人员显式地编写线程安全代码,即可解决多线程环境下它是不安全的问题【MSDN】
这种静态初始化的方式是在自己被加载时就将自己实例化,所以被形象地称之为饿汉式单例模式。
之前的单例模式要在第一次被引用时,才会将自己实例化,称为懒汉式单例模式。
using System;using System.Collections.Generic;using System.Text;namespace 静态初试化{ public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } public static Singleton GetInstance() { return instance; } } class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) Console.WriteLine("两个对象是相同的实例!"); Console.Read(); } }}
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- pgsql中设置远程访问
- myBatis + SpringMVC上传、下载文件
- 金蝶问题处理
- Ubuntu Linux 双网卡 局域网 共享上网 很简单的操作
- 一个老程序员的感悟:做技术二十多年,突然明白的道理
- 【设计模式】单例模式
- 贝儿的伤感爱情空间日志发布:宝贝,快回头吧,我等你
- MPI提供分布式数据服务
- Ubuntu 系统颜色颜色设置
- 分段函数求值
- Chart
- 学习C++ primer的关键点记录二
- The elements of programming style
- 一般纳税人与小规模纳税人的区别