首页 > 其他分享 >单例模式

单例模式

时间:2024-08-28 14:26:05浏览次数:9  
标签:Singleton 模式 instance 实例 static 单例 线程 多线程

1.单线程单例

确保一个类只有一个实例,并提供一个访问它的全局访问点

概念拆分(1.一个类只有一个实例2.提供一个全局访问点)

public  class  Singleton

{

  private static Singleton  singleton;  //定义一个静态变量来保护类的实例

  public  static  Singleton  GetSingleton()

  {

    if(singleton == null)    //如果是多线程的话,造成多个实例

    {

      singleton = new Singleton();  

    }

    return  Singleton;

  }

}

1.Singleton模式中的实例构造器可以设置为protected以允许子类派生

2.Singleton模式一般不要支持ICloneable接口,因为这个可能会导致多个对象实例,与SIngleton模式的初衷违背

3.Singleton模式不支持序列化,因为这个也有可能导致多个对象实例,同样与Singleton初衷违背

4.Singleton只考虑了对象创造的管理,没有考虑对象销毁的管理,就支持垃圾回收的平台和对象的开销来讲,我们一般没有必要对其销毁进行特殊处理

5.不能应对多线程环境,在多线程环境下,使用Singleton模式任然由可能得到Singleton类的多个实例

二、多线程的单例模式

private static volatile Singleton instance = null;

private static objiect lockHelper = new object();  //定义一个标识确保线程的安全同步

public static Singleton Instance  //定义共有方法提供一个全局访问点
{
get
{
if (_instance == null)
{
lock (typeof(lockHelper ))  //当第一个线程运行到这里加锁,第二个运行线程,首先检测加锁状态,该线程就会等待挂起,等待第一个线程解锁
{
if (_instance == null)
{
_instance = new CrnBizManager();
}
}
}
return _instance;
}
}

 

标签:Singleton,模式,instance,实例,static,单例,线程,多线程
From: https://www.cnblogs.com/melody7894/p/18358262

相关文章

  • 使用 pnpm workspace 和 standalone 模式构建 Next.js 的 Docker 镜像
    引言本文将探讨如何利用pnpmworkspace和standalone模式来构建Next.js应用程序的轻量级Docker镜像。这种方法通过仅在node_modules目录中包含必要的文件,显著减少了最终Docker镜像的大小。Standalone模式简介通常情况下,所有在dependencies中列出的包都会......
  • JS单例模式; super return 改变this
    简单的单例首先js中的函数是一种特殊的对象,这使得他可以存储属性functionaaa(params){}//undefinedaaa.lalala=123//123js中的类是通过原型链继承的,因此类就是函数的集合体,可以通过babel编译看看。因此可以写出简单的单例模式classSingleton{constructor(da......
  • 一起来学习.net core程序使用中介者模式:MediatR插件
    一起来学习.netcore程序使用中介者模式:MediatR插件     中介者模式是一种常见的设计模式,旨再降低程序的耦合性,因为传统的三层模式层层之间需要显示的调用,必须上层依赖下层,耦合性很高,为了解耦,将所有的指令单独放在一个位置处理,其他位置均通过这个位置来间接的调用,从......
  • 设计模式--单例模式
    1.单例模式:关注于对象的创建。分为懒汉式和饿汉式。懒汉式:调用方法的时候才创建;classSingleton{privateSingleton()//1.私有构造方法{Console.WriteLine("构造方法被创建");}privatestaticvolatileS......
  • 设计模式-策略模式
    1.概念定义        策略模式是一种行为型设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,从而让算法的变化不会影响到使用算法的客户。策略模式使得算法可以在不影响客户端的情况下发生变化。        在策略模式中,我们将不同的算法封......
  • [设计模式]策略模式
    publicinterfaceStrategy{voiddoWork();}publicclassAliPayimplementsStrategy{@OverridepublicvoiddoWork(){System.out.println("正在使用支付宝支付");}}publicclasswxPayimplementsStrategy{@Overridepubl......
  • 生产者消费者模式,以及基于BlockingQueue的快速实现
    生产者消费者模式,以及基于BlockingQueue的快速实现什么是生产者消费者模式,简单来说就是有两个角色,一个角色主要负责生产数据,一个角色主要负责消费(使用)数据。那么生产者直接依赖消费者,然后直接调用是否可以?答案是可以的,但是有些场景无法及时解决,典型的就是生产者消费者的速度无法同......
  • 设计模式command
    命令(Command)设计模式是一种行为型设计模式,它将请求封装为对象,从而使你可以将请求的发起者和请求的接收者解耦。这样,你可以使用不同的请求、队列或日志来管理请求,还可以支持可撤销的操作。以下是一个简单的命令模式的例子:假设我们有一个简单的遥控器,它可以控制灯的开和关。我们将......
  • 设计模式Chain of Responsibility(责任链)
    ChainofResponsibility(责任链)模式是一种行为型设计模式,用于处理请求的多个处理者之间的职责分配。它允许请求沿着一条处理链传递,直到有一个处理者能够处理它为止。这种模式可以避免请求发送者和请求处理者之间的紧耦合关系。主要概念Handler(处理者):定义了处理请求的接口,并实现......
  • 设计模式FlyWeight 享元模式
    Flyweight模式的核心思想是将对象的可共享部分抽取出来,以避免重复创建相同内容的对象。换句话说,Flyweight模式允许多个对象共享相同的数据来节省内存。 示例代码java复制代码importjava.util.HashMap;importjava.util.Map;//Flyweight接口interfaceShape{voiddr......