设计模式 - 单例模式 Singleton Pattern - C#
单例模式 Singleton Pattern
1、单例模式设计模式属于创建型模式
2、是单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
3、意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
4、主要解决:一个全局使用的类频繁地创建与销毁。
方式一:双 if Lock
1 namespace SingletonPattern
2 {
3 /*
4 * 私有化构造函数
5 * 私有化静态变量
6 * 使用一个静态的对象实例化
7 */
8 public class Singleton
9 {
10 private static Singleton? _Singleton = null;
11 private static readonly object SingletonLock = new();
12
13 //让构造函数为 private
14 private Singleton()
15 {
16 Console.WriteLine("实例化了对象");
17 }
18
19 public static Singleton CreateInstance()
20 {
21 if (_Singleton == null) //当对象不为 null 时,不需要再走 if 内的代码
22 {
23 lock (SingletonLock)
24 {
25 if (_Singleton == null) //保证对象为 null 才 new
26 {
27 _Singleton = new Singleton();
28 }
29 }
30 }
31 return _Singleton;
32 }
33
34 public void Show()
35 {
36 Console.WriteLine("{0} Show", this.GetType().Name);
37 }
38 }
39 }
方式二:静态构造函数
1 namespace SingletonPattern
2 {
3 /*
4 * 静态构造函数方式
5 */
6 public class Singleton2
7 {
8 private static readonly Singleton2 _Singleton2;
9
10 //让构造函数为 private
11 private Singleton2()
12 {
13 Console.WriteLine("实例化了对象");
14 }
15
16 /// <summary>
17 /// 静态构造函数 由 CLR 保证在第一次使用类之前被调用
18 /// </summary>
19 static Singleton2()
20 {
21 _Singleton2 = new Singleton2();
22 }
23
24 public static Singleton2 CreateInstance()
25 {
26 return _Singleton2;
27 }
28
29 public void Show()
30 {
31 Console.WriteLine("{0} Show", this.GetType().Name);
32 }
33 }
34 }
方式三:静态变量初始化
1 namespace SingletonPattern
2 {
3 /*
4 * 静态变量初始化方式
5 * 静态变量特点:第一次使用时初始化一次,且不会被回收
6 */
7 public class Singleton3
8 {
9 private static readonly Singleton3 _Singleton3 = new();
10
11 //让构造函数为 private
12 private Singleton3()
13 {
14 Console.WriteLine("实例化了对象");
15 }
16
17 public static Singleton3 CreateInstance()
18 {
19 return _Singleton3;
20 }
21
22 public void Show()
23 {
24 Console.WriteLine("{0} Show", this.GetType().Name);
25 }
26 }
27 }
使用:
1 Singleton singleton = Singleton.CreateInstance();
2 singleton.Show();
3
4 Singleton2 singleton2 = Singleton2.CreateInstance();
5 singleton2.Show();
6
7 Singleton3 singleton3 = Singleton3.CreateInstance();
8 singleton3.Show();
设计模式 - 单例模式 Singleton Pattern - C#的更多相关文章
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
- 设计模式之单例模式(Singleton Pattern)
单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...
- 乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
原文:乐在其中设计模式(C#) - 单例模式(Singleton Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 单例模式(Singleton Pattern) 作者:weba ...
- 设计模式系列之单例模式(Singleton Pattern)——确保对象的唯一性
模式概述 模式定义 模式结构图 饿汉式单例与懒汉式单例 饿汉式单例 懒汉式单例 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 适用场景 说明:设计模式系列文章是读刘伟所著 ...
- 【设计模式】单例模式 Singleton Pattern
通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance) 的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...
- 二十四种设计模式:单例模式(Singleton Pattern)
单例模式(Singleton Pattern) 介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点. 示例保证一个类仅有一个实例. Singleton using System; using S ...
- 抽象工厂(Abstract Factory),工厂方法(Factory Method),单例模式(Singleton Pattern)
在谈工厂之前,先阐述一个观点:那就是在实际程序设计中,为了设计灵活的多态代码,代码中尽量不使用new去实例化一个对象,那么不使用new去实例化对象,剩下可用的方法就可以选择使用工厂方法,原型复制等去实 ...
- 十次艳遇单例设计模式(Singleton Pattern)
1.引言 单例设计模式(Singleton Pattern)是最简单且常见的设计模式之一,在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访 ...
- 设计模式 单例模式(Singleton) [ 转载2 ]
设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...
- 设计模式 单例模式(Singleton) [ 转载 ]
设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...
随机推荐
- CAD动态输入框不见了怎么办?教你三个调出方法,轻松搞定!
CAD动态输入是除了命令行以外又一种友好的人机交互方式,在CAD设计过程中,启用CAD动态输入功能,可以直接在光标附近显示信息.输入值等.可当CAD动态输入框不见了的时候,该怎么办呢?本文小编以浩辰C ...
- atx
https://github.com/openatx/atx-agent/releases/download/0.9.4/atx-agent_0.9.4_linux_386.tar.gz
- vue-用户管理系统
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信小程序笔记_02
在微信小程序中使用Echarts组件 github源码地址:https://github.com/ecomfe/echarts-for-weixin gitcode源码地址:https://gitco ...
- jupyter notebook代码无法运行
如果是anaconda的话,直接就带有jupyter而不需要重新安装,你这样子就是路径混乱了.先输入jupyter kernelspec list查看安装的内核和位置,然后进入显示的安装目录,打开ke ...
- PTA-R7-1 圆形体体积计算器
R7-1 圆形体体积计算器 分数 20 全屏浏览题目 切换布局 作者 张高燕 单位 浙江大学 本题要求实现一个常用圆形体体积的计算器.计算公式如下: 球体体积 V=4π*r3/3,其中r是球体半径 ...
- js数组的创建、添加、删除、获取指定元素下标
数组: 1.数组内可以存放任意类型的数据 2.数组元素不赋值,则为undefined 3.打印数组时,如果某个元素没有赋值,则为"" 4.访问数组范围以外的元素时,不会出现越界异常 ...
- gym102586C Sum Modulo
题意: 给你 \(n,m,k\) 以及\(p_i(1\le i\le n)\) ,保证 \(\sum p_i=1\) 你有一个数 \(X\),一开始 \(X=0\) 每次你会生成一个随机数 \(A\) ...
- 整数中出现1的次数(从1到n整数中1出现的次数)
offer_31 概要:整数中出现1的次数(从1到n整数中1出现的次数) 题目描述 求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有 ...
- 1792. 最大平均通过率 (Medium)
问题描述 1792. 最大平均通过率 (Medium) 一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试.给你一个二维数组 classes ,其中 classes[i] = ...