首页 > 其他分享 >设计模式-单例械

设计模式-单例械

时间:2023-11-05 11:11:44浏览次数:28  
标签:Singleton guid GetInstance private instance 单例 设计模式 GetGuid

// See https://aka.ms/new-console-template for more information
//设计模式-单例模式
//目的:唯一性,内存资源,GCtffu
//保证整个系统中一个类只有一个对象的实例


using System.Threading.Channels;

Singleton.GetInstance().GetGuid();
Singleton.GetInstance().GetGuid();
Singleton.GetInstance().GetGuid();


class Singleton
{
    private Guid _guid;
    private static Singleton _instance;
    private Singleton()
    {
        _guid = Guid.NewGuid();

    }
    public static Singleton GetInstance()
    {
        if (_instance is null)
        {
            _instance = new Singleton();
        }
        return _instance;
    }
    public void GetGuid() => Console.WriteLine(_guid);
}

下面是在并发情况下的运行情况,并不能保证是一个单例

// See https://aka.ms/new-console-template for more information
//设计模式-单例模式
//目的:唯一性,内存资源,GCtffu
//保证整个系统中一个类只有一个对象的实例


using System.Net.Http.Headers;
using System.Threading.Channels;

//Singleton.GetInstance().GetGuid();
//Singleton.GetInstance().GetGuid();
//Singleton.GetInstance().GetGuid();

//并发情况下,并不能保证每创建的是同一个实例
Parallel.For(0, 3, index =>
{
   var id = Singleton.GetInstance().GetGuid();
Console.WriteLine($"第{index}次:{id}");
});


class Singleton
{
   private Guid _guid;
   private static Singleton _instance;
   private Singleton()
   {
       _guid = Guid.NewGuid();

   }
   public static Singleton GetInstance()
   {
       if (_instance is null)
       {
           _instance = new Singleton();
       }
       return _instance;
   }
   public Guid GetGuid() => _guid;
  
}

第2次:1624c990-26e5-4c73-add1-fc3b736c1059
第0次:7782f74d-9100-4115-9d37-c5a2cd40f481
第1次:2ab01b9a-48c3-45af-b613-ced3def060b5

img

标签:Singleton,guid,GetInstance,private,instance,单例,设计模式,GetGuid
From: https://www.cnblogs.com/bcd589/p/17810318.html

相关文章

  • 设计模式-策略模式
    策略模式:定义一系列的算法,将每个算法分别封装起来,让它们可以互相替换。策略模式用于算法的自由切换和扩展,它是使用较为广泛的设计模式之一。策略模式对应于解决某一问题的一个算法族,允许用户从该算法中任选一个算法解决某一问题,同时可以方便地更换算法或者增加新算法。策略模式......
  • 设计模式—结构型模式之适配器模式
    设计模式—结构型模式之适配器模式将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器模式分为类结构型模式(继承)和对象结构型模式(组合)两种,前者(继承)类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少......
  • 设计模式
    一、工厂模式1、简单工厂模式通过一个具体的工厂类,根据传入不同的参数,生成实际对象2、工厂方法模式在工厂方法模式中,不再由单一的工厂类生产产品,而是由工厂类的子类实现具体的产品创建。当增加一个产品时,只需增加一个相应的工厂类的子类,实现生产这种产品,从而解决简单工厂生产......
  • 双重校验锁实现对象单例
    uniqueInstance采用volatile关键字修饰也是很有必要的,uniqueInstance=newSingleton();这段代码其实是分为三步执行:为uniqueInstance分配内存空间初始化uniqueInstance将uniqueInstance指向分配的内存地址但是由于JVM具有指令重排的特性,执行顺序有可能变成1->3->2。......
  • 软件设计实验7:单例模式
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求:1. 画出对应的类图;  2......
  • 设计模式-单例模式概述
    我们常把23种经典的设计模式分为三类:创建型、结构型、行为型,其中创建型设计模式主要解决“对象的创建”问题,将创建和使用代码解耦,结构型设计模式主要解决“类或对象的组合或组装”问题,将不同功能代码解耦,行为型设计模式主要解决“类或对象之间的交互”问题,将不同的行为代码解耦。......
  • tsne、umap可视化简单例子
    importnumpyasnpfromsklearn.manifoldimportTSNEfromsklearn.decompositionimportPCAimportmatplotlib.pyplotaspltimportumapimporttorchX=torch.load('embeddings.pt')#(19783,16)y=np.load('labels.npy')#reduced_x=......
  • 每日总结Java设计模式之原型模式
    今天完成了设计模式的原型模式实验用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节简单说就是先创建一个原型类实例,然后通过克隆的方法来复制一个一样的新对象,这个对象和原来......
  • 每日总结Java设计模式之单例模式
    今天做了单例模式的实验代码在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式有3个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点;1.单例模式的......
  • Flyweight 享元模式简介与 C# 示例【结构型6】【设计模式来了_11】
    〇、简介1、什么是享元模式?一句话解释:  将相似或同类的对象共享同一个对象,将这些对象暂存在列表中,使用时直接取出,避免每次使用时都要新建浪费资源。享元模式的目的是减少对象的创建,通过共享对象来提高系统的性能。享元设计模式将对象的实例分为两种:内部共享对象和外部共享对......