C#设计模式-单例模式(Singleton Pattern )

Ubuntu 20.04 server 安装 Ubuntu 20.04 server 安装 前面我们介绍了 Ubuntu Desktop 版本的安装,今天我们来看看 Ubuntu server 版本的安装。Ubuntu Server 版本的安装和 Desktop 有很大的区别,并且全程不能使用鼠标,只能通过键盘。 从光盘或 U 盘启动到 Welcome 界面,选择语言,一般都是使用 English,所以保保持默认,直接按回车即可; 系统检测到了新的版本,问你是否是否更新,这里我们不需要安装新的版本,所以选项 Continue without upda 阅读详情

 一、单例(Singleton)模式

单例模式的特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其它对象提供这一实例。

单例模式应用:

  • 每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。
  • 一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键编号。否则会出现主键重复。 

二、Singleton模式的结构

 

Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。(关于线程问题以及C#所特有的Singleton将在后面详细论述)。 

 三、程序示例

Singleton: 

using System;
using System.Collections.Generic;
using System.Text;  
namespace Pattern.Singleton
{
  /**//// <summary>
  /// 泛型实现单例模式
  /// </summary>
  /// <typeparam name="T">需要实现单例的类</typeparam>
  public class Singleton<T> where T : new()
  {
    /**//// <summary>
    /// 返回类的实例
    /// </summary>
    public static T Instance
    {
      get { return SingletonCreator.instance; }
    }
  
    class SingletonCreator
    {
      internal static readonly T instance = new T();
    }
  }
}
 

Test: 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;  
using Pattern.Singleton;  
public partial class Singleton : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    // 使用单例模式,保证一个类仅有一个实例
    Response.Write(Singleton<Test>.Instance.Time);
    Response.Write("<br />");
    Response.Write(Singleton<Test>.Instance.Time);
    Response.Write("<br />");
  
    // 不用单例模式
    Test t = new Test();
    Response.Write(t.Time);
    Response.Write("<br />");
    Test t2 = new Test();
    Response.Write(t2.Time);
    Response.Write("<br />");
  }
}  
public class Test
{
  private DateTime _time;  
  public Test()
  {
    System.Threading.Thread.Sleep(3000);
    _time = DateTime.Now;  
  }
  
  public string Time
  {
    get { return _time.ToString(); }
  }
}

运行结果:

2007-2-10 22:35:11
2007-2-10 22:35:11
2007-2-10 22:35:14
2007-2-10 22:35:17
   

 

四、在什么情形下使用单例模式

使用Singleton模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就不要使用单例模式。

注意:

不要使用单例模式存取全局变量。这违背了单例模式的用意,最好放到对应类的静态成员中。

不要将数据库连接做成单例,因为一个系统可能会与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放,带来问题。 

 

五、 C#中的Singleton模式

C#的独特语言特性决定了C#拥有实现Singleton模式的独特方法。这里不再赘述原因,给出几个结果: 

方法一:

下面是利用.NET Framework平台优势实现Singleton模式的代码:

sealed class Singleton
{
   
private
 Singleton();
   
public static readonly Singleton Instance=new
 Singleton();
}

这使得代码减少了许多,同时也解决了线程问题带来的性能上损失。那么它又是怎样工作的呢?

注意到,Singleton类被声明为sealed,以此保证它自己不会被继承,其次没有了Instance的方法,将原来_instance成员变量变成public readonly,并在声明时被初始化。通过这些改变,我们确实得到了Singleton的模式,原因是在JIT的处理过程中,如果类中的static属性被任何方法使用时,.NET Framework将对这个属性进行初始化,于是在初始化Instance属性的同时Singleton类实例得以创建和装载。而私有的构造函数和readonly(只读)保证了Singleton不会被再次实例化,这正是Singleton设计模式的意图。
(摘自:http://www.cnblogs.com/huqingyu/archive/2004/07/09/22721.aspx )

不过这也带来了一些问题,比如无法继承,实例在程序一运行就被初始化,无法实现延迟初始化等。

详细情况可以参考微软MSDN文章:《Exploring the Singleton Design Pattern》 

方法二:

既然方法一存在问题,我们还有其它办法。

public sealed class Singleton
{
  Singleton()
  
{
  }

  
public static
 Singleton GetInstance()
  
{
    
return
 Nested.instance;
  }
    
  
class
 Nested
  
{
    
// Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static
 Nested()
    
{
    }

    
internal static readonly Singleton instance = new
 Singleton();
  }
}

这实现了延迟初始化,并具有很多优势,当然也存在一些缺点。详细内容请访问:《Implementing the Singleton Pattern in C#》。文章包含五种Singleton实现,就模式、线程、效率、延迟初始化等很多方面进行了详细论述。

 

CANoe诊断测试避坑指南:DTC故障注入与ECU刷写失败的N个常见原因排查 本文深入解析CANoe诊断测试中的常见问题,重点探讨DTC故障注入与ECU刷写失败的排查策略。从会话管理、安全访问到数据完整性校验,提供实战经验与CAPL脚本示例,帮助工程师规避诊断测试中的典型陷阱,提升车载网络通信与ECU刷写的可靠性。 阅读详情

相关推荐

深度学习二分类实战:用Python+Keras搞定基因表达数据预测(附完整代码)

本文详细介绍了如何使用Python和Keras构建深度学习模型进行基因表达数据的二分类预测。通过数据预处理、特征选择、神经网络构建及优化策略,特别针对小样本场景提供了调参技巧和模型解释方法。文章还包含完整的代码示例,帮助读者快速掌握深度学习在生物信息学中的应用。

weixin_30642561的博客 245

设计模式 ——【单例模式】

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一...

Janson_Lin 642

算法笔记 经典取石子游戏总结 博弈论

经典取石子游戏总结 1.巴什博弈 有一堆石子共n个,A和B轮流取,A先取。每次最少取1个,最多取m个,先取完者获胜(即没有石子取的人失败)。A与B都足够聪明,问A能否获胜。 结论:当n%(m+1)!=0时A必胜,否则必败。 2.斐波那契博弈 有一堆石子共n个,A和B轮流取,A先取。每次最少取1个。第一次不能取完。从第二次开始,每个人取的石子数至少为1,至多为前一个人取的石子数的2倍。先取完者获胜。...

CraigMC的博客 2936

【设计模式】单例(Singleton)

1、什么是单例呢?顾名思义单例就是单个实例,单个对象的意思。 2、单例设计模式的功能:可以保证一个类只生成一个类的实例,也就是说在整个程序空间里只存在一个该类的实例。 一、案例引申 1、栗子 如上图:首先我们创建了一个Person类,紧接着我们写个测试类 调用他 打印其对象的内存地址。 2、思考-------设计单例 观察结果发现三个内存地址都不同,此时你会发现我们每次都 “new”...

dev晴天的博客 1201

手把手教你用STM32实现三相永磁同步电机FOC控制(附代码)

本文详细介绍了基于STM32的三相永磁同步电机(PMSM)FOC控制实现方法,涵盖硬件设计、软件架构、参数调试及完整代码解析。通过磁场定向控制(FOC)算法,实现高效精准的电机控制,适用于工业自动化、电动汽车等领域。文章还提供了硬件选型建议、电流采样方案对比及PID参数整定技巧,助力开发者快速掌握FOC控制技术。

weixin_29168675的博客 96

量化交易中的烂板策略:短线高频交易实战解析

量化交易通过算法模型实现自动化投资决策,其中短线高频交易是典型应用场景。从市场微观结构看,涨停板现象反映了资金博弈的动态平衡,而烂板策略正是捕捉涨停板短暂打开时的交易机会。该策略结合L2行情数据和Python量化框架,通过参数化规则识别特定形态的烂板股票,在风险可控前提下追求超额收益。实战中需严格遵循动态仓位管理和止损纪律,适用于A股市场短线交易。高频交易与量化分析技术的结合,为投资者提供了新的alpha挖掘工具。

weixin_30432579的博客 364

设计模式------单例模式

一、 单例(Singleton)模式单例模式的特点:·       单例类只能有一个实例。·       单例类必须自己创建自己的唯一实例。·       单例类必须给所有其它对象提供这一实例。单例模式应用:·       每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。·       一个具有自动编号主键的表

johncools的博客 1231

5.4 GTT BO的内存分配分析

本文分析了AMD GPU驱动中的GTT技术实现。GTT作为GPU页表,负责管理主机内存与GPU虚拟地址的映射,支持大容量内存访问和统一寻址。文章详细介绍了GTT的核心数据结构amdgpu_gtt_mgr、初始化流程,以及BO(Buffer Object)创建时GTT区间的分配与释放机制。GTT管理通过TTM框架实现分层设计,提供内存统计、兼容性检查等接口,并支持动态迁移、多进程隔离等高级特性。该机制为AMD GPU提供了高效灵活的内存管理基础。

图形/计算GPU的驱动与虚拟化技术分享园地 3732

单实例(单例模式)

特点: 1、只能被初始化一次(不能提供public的构造函数和析构函数) 2、不能被拷贝(不能提供拷贝构造函数、赋值函数) 示例: Windows中进行socket开发时,要loadWs2_32.lib,同时还要调用WSAStartup和WSACleanup来初始化和释放资源,使用中只要初始化一次就可以,这时候就可以通过单实例来实现。 头文件 #pragma once class CWinSockInit { public: static CWinSockInit& GetIns.

Forston的博客 1236

生物量预测:基于Swin-Unet模型的生物量模型预测

本文提出了一种基于Swin-Unet架构的多源遥感地上生物量(AGB)预测方法。该方法整合了光学影像、SAR雷达影像、气候环境参数以及地形数据(坡度和坡向)等多源信息,通过24个输入通道(13+2+7+1+1)构建预测模型。研究采用Min-Max归一化预处理数据,并使用80%训练集、16%验证集和20%测试集的划分策略。模型基于Swin-Unet 2D架构,设置64个初始滤波器、4层深度、4×4堆叠数和2×2补丁大小。该方法通过整合多源遥感数据和先进深度学习架构,为AGB反演提供了新的解决方案。

此星光明博客 61

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1238

单实例和多实例应用区别

单实例\color{7DB9D3}单实例单实例 说明:之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存; 应用场景 外部资源:每台计算机有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机。 内部资源:大多数软件都有一个(或多个)属性文件存放系统配置,这样的系统应该有一个对象管理这些属性文件。 网站计数器。 应用程序的日志应用,由于共享的日志文件一直处于打开状态,因此只能有一个实例去操作,否则内容不好追加。 Web应用的配置对象的读取,

qq_41597232的博客 2927

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3130

C# 设计模式——单例模式(Singleton Pattern)

单例模式(Singleton Pattern)是设计模式中最基础但应用最广泛的一种模式,它确保一个类只有一个实例,并提供一个全局访问点。在C#开发中,单例模式常用于管理共享资源、配置管理、日志系统等场景。

2404_88212162的博客 2889

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C#设计模式——单例模式(Singleton Pattern)

C#中设计模式——单例模式初步了解,单线程和多线程情况下使用。

qq_57198771的博客 5648

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[置顶] 设计模式之单例模式 (Design patterns of the The singleton pattern)c#

单例模式饿目的是确保某个类只有一份实例,而且从在一个全局访问点来访问这个实例,这一模式保证类只能被实例化一次,而且所有的请求都使用这个唯一的实例,此外,对象应该在使用的时候才被创建,在单例模式中,实施这种约束的是类本身,而不是类的额客户。 理论代码: public sealed class Singleton{ //私有构造函数 Singleton(){ } //通过私有构造函...

weixin_30740295的博客 147

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C#设计模式之单例模式(Singleton Pattern)

单例模式解释:         一个类有且仅有一个实例,并且自行实例化向整个系统提供。这一模式的目的是使得类的一个对象成为系统中的唯一实例。 使用时机:        对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就

donnie88888888的专栏 755

D2:C#设计模式之一单例模式(Singleton Pattern)【创建型】

一、引言 看了李建忠老师的讲的设计模式已经有一段时间了(这段时间大概有一年多了),自己还没有写过自己的、有关设计模式的文章。这次想写一些关于设计模式的文章,用自己的理解和代码来写,算是复习一遍。写作的过程中也会多看看其他大牛的文章,争取让自己的理解正确,否则把大家带跑偏了,就是我的过错了。今天就开始我们第一个设计模式,该模式是:【单例模式】,英文名称:Singleton Pattern,...

. 489

C# 设计模式:第一章 - 创建者模式 之 单例模式(Singleton Pattern)

在这章中,我们学习了单例模式的基本概念、应用场景、实现方法以及注意事项。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。它在节省资源、提供全局访问点和控制实例化方面有着重要的作用。我们通过三个不同的实现方式(懒加载、饿汉式和双重检查锁定)展示了如何在 C# 中实现单例模式,并通过实际的代码示例展示了它们的使用方法。最后,我们还讨论了一些使用单例模式时需要注意的地方,帮助你在实际开发中做出明智的选择。

caifox的博客 805

C#设计模式读书笔记之线程安全的单例模式(Singleton Pattern)

单例模式(Singleton Pattern)【使用频率:★★★★★】 1.概述: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例指的是只能存在一个实例的类,在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类,它是软件工程中使用最多的几种模式之一。在第一个使用者创建了这个类的实例之后,其后需要使用这...

qq826364410的专栏 1321

【C#设计模式(1)——单例模式(Singleton Pattern)】

单例模式:程序运行时只创建一个对象实例。

weixin_43626218的博客 502

C# -- 设计模式 -- Singleton Pattern 单例模式 (干货)

本文主要是记录《Head First 设计模式》知识,目的是检查自己学到的知识,同时方便我以后进行复习和浏览。在写文章时,参考 Graphic Design Patterns网站。 一、概述 ##1-1 定义 单例模式 Singleton Pattern:保证一个类只有一个实例,并提供一个访问它的全局访问点。又称为单件模式 单例模式有三个要点: 某个类只有一个实例 它必须自行创建这个实例 它必须...

M1234uy的博客 480

乐在其中设计模式(C#) - 单例模式(Singleton Pattern)【转】

介绍 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 示例 保证一个类仅有一个实例。 Singleton using System; using System.Collections.Generic; using System.Text; namespace Pattern.Singleton { /// <summary&g...

aaxd0402的博客 110

乐在其中设计模式(C#) - 单例模式(Singleton Pattern)

[索引页][源码下载]乐在其中设计模式(C#) - 单例模式(Singleton Pattern)作者:webabcd介绍保证一个类仅有一个实例,并提供一个访问它的全局访问点。示例保证一个类仅有一个实例。Singletonusing System;using System.Collections.Generic;

webabcd的专栏 506

C#设计模式之一单例模式(Singleton Pattern)【创建型】

一、引言     看了李建忠老师的讲的设计模式已经有一段时间了(这段时间大概有一年多了),自己还没有写过自己的、有关设计模式的文章。这次想写一些关于设计模式的文章,用自己的理解和代码来写,算是复习一遍。写作的过程中也会多看看其他大牛的文章,争取让自己的理解正确,否则把大家带跑偏了,就是我的过错了。今天就开始我们第一个设计模式,该模式是:【单例模式】,英文名称:Singleton Patter...

weixin_33836223的博客 299

C#设计模式-Singleton Pattern

一、单例(Singleton)模式 单例模式的特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其它对象提供这一实例。 单例模式应用: 每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。 一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个...

dizoumian7342的博客 135
上一篇: Lucene学习总结之一:全文检索的基本原理
下一篇: 被神化的框架
jackfirst86
博客等级 码龄18年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值