设计模式 - 单例模式 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 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...
随机推荐
- 所谓的安装phpmyadmin
所谓的安装phpmyadmin, 或者 安装drush, 都是下载一个文件, 然后URL访问或者命令行访问这个文件, 进入到某个页面或者获得某个结果.刚开始觉得很神秘哦, 为什么?--安装软件分两种1 ...
- docker-compose 文件
安装 curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s` ...
- Windows11 微软提供三种路径 安装程序应用
Windows11 微软提供三种路径 安装程序应用
- spring-cloud项目初始化问题
无法引入本地依赖 参考:https://blog.csdn.net/qq_39684784/article/details/115289982 时区问题: url设置:serverTimezone=U ...
- ORACLE 配置ST_GEOMETRY以支持SQL方式操作SDE数据库
这里假设已经在ORACLE里边创建了SDE数据库,在此基础上进行配置: 1.以sde用户登录到oracle,运行一下语句: SELECT * FROM USER_LIBRARIES; CREATE O ...
- maven 通用pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http:// ...
- python面向对象--类的刨析
编程日常::::#编程就是程序员用特定的语法加数据结构加算法在计算机上执行过程,方式有很多种,最常用的就是面向对象编程和面向过程编程#设计思路一开始解决一个大问题,然后把大问题分解成小问题,一步步解决 ...
- 织梦dedecms网站迁移搬家图文教程
织梦dedecms网站迁移搬家图文教程 2014-07-31 dedecms教程 文章介绍 织梦作为国内使用最多的程序之一,难免很多新手在接触dede时不知道怎么转移也就是搬家dede的程序,而且 ...
- vue编辑修改,点击取消操作时,table内的内容不变
1.父组件内 2.子组件内(使用JSON.parse(JSON.stringify(xxx值))) 进行深拷贝
- 【SSO单点系列】(1):CAS4.0 之环境的搭建
[SSO单点系列](1):CAS4.0 环境的搭建 一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 ...