-
一例读懂设计模式之-单例模式
程序设计模式-创建模式-单例模式
意图:保证一个类仅有一个实例或只有指定个数的实例(实例池),并提供一个访问它的全局访问点。
主要解决:保证实例的单一性
适用于:1当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 2当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
场景:定义一个SingtanceClass类 。在程序中只能实例化一次。
思路:
第一步、为了确保实例的唯一性,我们第一步就是要在类的定义中私有化一个静态自己。
第二步、我们都知道类的构造方法不写时,系统会自动给我们生成一个public的无参构造方法,所以为了避免new出多个对象,我们必须将构造函数手写,设置为private私有类型
第三步、我们再给外界提供一个公共静态方法作为此类的唯一全局访问点。在此方法中if判断,如果此实例为空,则调用构造方法初始化,如果不为空,则直接返回此实例。
第四步、线程安全是在多线程程序中必须考虑的我们可以定义一个object 的线程锁标记。用来确保多个线程不会同时创建出多个此类
定义代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 创建模式_1.单例模式 { public class SingletonClass //public { private static SingletonClass sc;//私有化这个唯一实例对象 private static readonly object locker = new object(); // 定义一个标识确保线程同步,非多线程可无 private SingletonClass()//私有化构造方法,使其无法通过new实例化出。 如果不写,默认系统会自动给我们创建public的构造方法,这样就可以通过new实例化出来。 { } //定义一个公共方法,用来做该实例的唯一全局访问点 public static SingletonClass GetInstance() { lock (locker)//非多线程可无 { if (sc == null) // 如果类的实例不存在则创建,否则直接返回 { sc = new SingletonClass(); } Console.WriteLine("实例化类为" + sc.ToString());//用于演示 } return sc;//最终返回本类实例 } } }
在程序中调用如下

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 创建模式_1.单例模式 { /*23种设计模式-创建模式-单例模式 * 2020年8月31日15:50:44 lhz.06@qq.com * * 意图:保证一个类仅有一个实例或只有指定个数的实例(实例池),并提供一个访问它的全局访问点。 * 主要解决:保证实例的单一性 * 适用于:1当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 2当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 * */ class Program { static void Main(string[] args) { SingletonClass sc = SingletonClass.GetInstance();//调用全局访问点方法 Console.ReadLine(); } } }
运行结果
出处:https://www.cnblogs.com/arcticfish/p/13590335.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数