设计模式 - 单例模式 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 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...
随机推荐
- centos 绑定多ip
复制ifcfg-ens192 文件,为 ifcfg-ens192:0 修改ip 和 device 为 "ens192:0",其他不变,service network restart ...
- MySQL 5.7升级8.0过程(详解)
记一次MySQL 5.7升级8.0的详细过程,聊聊我的思路,希望可以帮助大家. 以一个例子为切入点 一.升级背景 为什么要升级到MySQL8.0?大概多久进行一次? 大家可以参考下图记录的各个版本的发 ...
- Worksheet使用方法
1 下载印象笔记: iPhone/iPad在App Store搜索"印象笔记"后下载 安卓在应用市场或在印象笔记官网yinxiang.com下载,图标同上 电脑可至印象笔记官网y ...
- vvvvvvue
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="" ...
- mybatis原理探究
jdbc数据库运行流程: JDBC有哪三种statement接口: Statement 1.Statement接口提供了执行语句和获取结果的基本方法: 2.Statement继承自Wrapper:3. ...
- centos7 安装jupyter
1.基本包安装 yum update -y yum install python-pip -y yum install bzip2 -y yum groupinstall "Developm ...
- CF319D 题解
题意 传送门 给你一个字符串 \(S\),要求你每次找到一个最短的并且最左边的形如 \(XX\)(即由两个相同的字符串拼接而成)的子串,然后把这个字符串从 \(XX\) 变成 \(X\).问无法操作后 ...
- 国内加速访问github
总结 有用,有效 参考链接: https://www.cnblogs.com/sitoi/p/11819649.html
- vue dialog弹窗
<el-dialog v-model="dialogFormVisible" :before-close="closeDialog" title=&quo ...
- IntelliJ IDEA 工具识别不了 过大Java文件 引用识别的不了的文件报错
之前出现过proto 生成的文件过大 idea 识别不了 引用消息报错. 解决方案 1.找到IntelliJ IDEA 桌面快捷键图标 右键属性 2.打开文件位置,找到所在目录 3.找到idea.pr ...