线程安全的单件模式(单例模式)

1.定义:

某一个类只有一个实例,并且这个实例是在类内部进行实例化,并向整个系统提供该实例。

2.单例模式的通用代码:

public sealed class Singleton

{

private static sealed Singleton _singleton = new Singleton();

private Singleton()

{ }

public static Singleton GetInstance()

{

return _singleton;

}

public static void DoSomething()

{ }

}

3.优点:

3.1减少内存开销,适合对象频繁创建和销毁,提升性能。

3.2生成全局对象,资源共享。

点:

     

4.单例模式使用场景


内存只能有一个对象

//本质:内存中只能有一个对象
//案例:定时器,计数器
//使用场景:一个项目只要一个共享访问点和共享数据;创建对象消耗资源比较多,如IO操作和数据库读取
//注意:线程安全
public sealed class Singleton
{
     private static Singleton _singleton = null;
     private static readonly object _synLock = new object();

private Singleton(){}

public static Singleton GetInstance()
     {
          lock (_synLock)

{
               if (_singleton==null)

_singleton = new Singleton();
            
               return _singleton;
          }
     } 
}

时间: 2024-11-07 02:46:48

线程安全的单件模式(单例模式)的相关文章

Java设计模式——线程安全的单件模式

单件模式,也称单例模式,用以创建独一无二的.只能有一个实例的对象. 单件模式的类图是所有模式的类图中最简单的--只有一个类.尽管从类设计的视角来看单件模式很简单,但是实现上还是会遇到一些问题,本文着重对这一点来进行分析解决. 最简单的单件模式的实现,代码如下: 1 /** 2 * Created by McBye King on 2016/10/23. 3 */ 4 public class Singleton { 5 private static Singleton singleton; 6

【C#设计模式】01.你真的知道线程安全的“单件模式”吗?

概述: 单件模式的类图可以说是所有模式的类图中最简单的,事实上,它的类图上只有一个类. 尽管从设计的视角来说它很简单,但是实现上还是会遇到相当多的波折. 一.职责: 1.保证一个类有且仅有一个实例 2.且提供一个全局访问点 二.代码中需要用到的地方 线程池(Thread Pool)/缓存(cache)/对话框/处理偏好设置和注册表的对象/日志对象/充当打印机/显卡等设备的驱动程序的对象. 三.生活中用到的地方 1.考勤记录仪可以有多台,但是时钟必须只有一个,所有的考勤记录必须根据这个时钟来生成打

设计模式(5)--单件模式

同步一个方法可能造成程序执行效率下降100倍. 静态初始化的控制权是在Java手上 一个类,一个责任 原则. ( 类应该做一件事,而且只做一件事)  但单件做了两件事, 一是 管理自己的实例(并提供全局访问变量) 二是在应用程序中担任角色, (1). 私有构造器.不提供对外访问   (2). 静态方法对外提供类本身实例.    (3)  . 只有一个实例 单例模式:  ( 管理共享资源 如数据库连接,或者线程池)  MVC  DAO Service 层 延迟实例化(懒汉式) 有线程安全问题  -

设计模式之单件模式(Singleton Pattern)

一.单件模式是什么? 单件模式也被称为单例模式,它的作用说白了就是为了确保“该类的实例只有一个” 单件模式经常被用来管理资源敏感的对象,比如:数据库连接对象.注册表对象.线程池对象等等,这种对象如果同时存在多个的话就会造成各种不一致的麻烦(你总不希望发生数据库重复连接的异常吧) 二.如何保证类的实例只有一个? (这个问题看似简单,但如果没有接触过单件模式的话,要自己想出来解决方案还是需要一些天赋的..不信的话,可以试着想想..) 1.类的实例可能只有一个吗?貌似只要知道类名就可以随便new了吧?

四、单件模式

单件模式:某一个类只有一个实例,并且这个实例是在类内部进行实例化,并向整个系统提供该实例. 单件模式UML类图: class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetSington(); Singleton s2 = Singleton.GetSington(); if (s1 == s2) { Console.WriteLine("相同"); } else { Console.Wr

说说设计模式~单件模式(Singleton)

单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { 3 static Singlton instance = null; 4 private Singlton() { } 6 7 public static Singlton Instance 8 { 9 get 10 { 11 if (instance == null) 12 { 13 insta

设计模式 - 单件模式(singleton pattern) 详解

单件模式(singleton pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28595349 单件模式(singleton pattern) : 确保一个类只有一个实例, 并提供一个全局访问点. 单价模式包括3个部分: 私有构造器, 静态变量, 静态方法. 具体方法: 1. 标准的单例模式: /** * @time 2014.6.5 */ package singleton; /** * @author

单件模式(Singleton创建型)c#简单例子

单件(Singleton创建型模式)c#简单例子 需要生成一个实例时,可采用单件模式 例子中只可生成一个玩家,并对玩家进行测试.单线程例子如下: namespace singletonpattern { public partial class SingletonForm : Form { public SingletonForm() { InitializeComponent(); } private void btnDisplay_Click(object sender, EventArgs

设计模式之单件模式

一.概述 /*    一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一个对象,即增加了开销,也使得代码更加臃肿.    其实,我们只需要一个实例对象就可以.如果采用全局或者静态变量的方式,会影响封装性,难以保证别的代码不会对全局变量造成影响.    考虑到这些需要,我们将默认的构造函数声明为私有的,这样就不会被外部所new了,甚至可以将析构函数也声明为私有的,这样就只有自己能够删除自己了.    在Java和C#这样纯的面向对象的语