C#_单例模式
单例:在程序的整个进程中只会被实例化一次
如:User user =new User();实例化一个User();的时候new User()是调用的 User类的 默认的公有构造函数:public User(){};
一.想要整个程序只实例化一次这个User的话如:
1.private static User_user=null; 定义一个私有的静态变量
2.提供静态公有方法返回实例化对象
public static GetUser(){
if(User_user==null)
{
User_user=new User();
}
return User_user;
}
3.调用:User user =User.GetUser();//进行返回单个实例
4.多线程的时候需要加一把锁:
private static object _lock =new object();//定义一个静态的对象最好是object类型
public static GetUser(){
if (User_user==null)
{
lock (_lock)
{
if(User_user==null)
{
User_user=new User();
}
}
}
return User_user;
}
加锁进行多线程判断
二.想要整个程序只实例化一次这个User的话如:
private static User User_user =null;//提供私有静态实例对象
static User()//CLR运行的时候,第一次使用这个类之前,一定会而且只执行一次
{
User_user =new User();
}
public static GetUser()//提供公有静态方法供外部调用
{
return User_user;
}
//双重锁机制 namespace Singleton
{
public class Singleton
{
//定义一个私有的静态全局变量来保存该类的唯一实例
private static Singleton singleton;
//定义一个只读静态对象
//且这个对象是在程序运行时创建的
private static readonly object syncObject = new object(); /// <summary>
/// 构造函数必须是私有的
/// 这样在外部便无法使用 new 来创建该类的实例
/// </summary>
private Singleton()
{ } /// <summary>
/// 定义一个全局访问点
/// 设置为静态方法
/// 则在类的外部便无需实例化就可以调用该方法
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
//这里可以保证只实例化一次
//即在第一次调用时实例化
//以后调用便不会再实例化
//第一重 singleton == null
if (singleton == null)
{
lock (syncObject)
{
//第二重 singleton == null
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
}
C#_单例模式的更多相关文章
- C#基础_单例模式
控制某个类型的实例数量-唯一一个 class Program { static void Main(string[] args) { test t1 = test.GetInstance(); tes ...
- java_设计模式_单例模式_Singleton Pattern(2016-08-04)
概念: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 适用场景: 在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或 ...
- JAVA_多线程_单例模式
这篇是入职之后的第二篇了,上一篇我简单介绍了一下LOCK里面的类的方法,感兴趣的话可以去了解一下,以后坚持每周至少会更新一篇关于多线程方面的文章,希望博友们可以一起加油成长. 这篇主要的内容是单例模式 ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
- PHP设计模式_单例模式
了解 单例设计模式用于限制特定对象只能被实例化创建一次,有且只有一个此类型的资源.例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销 ...
- Java设计模式_创建型模式_单例模式
单例模式的实现: 定义一个类,在类中定义该类的静态变量,再定一个一个获取该类的静态变量的方法. UML图:
- java基础_单例模式
java开发实战经典 --单例模式 从CSDN以及博客园的相关文章学习的,摘做笔记. “java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式 ...
- java设计模式_单例模式
懒汉式 非线程安全 特点:Lazy 初始化.非多线程安全.易实现 描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程.因为没有加锁 synchronized,所以严格意义上它并不算单 ...
- 【GOF23设计模式】单例模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_单例模式.应用场景.饿汉式.懒汉式 1.GOF23设计模式 2.单例模式 3.饿汉式 1 package com.t ...
随机推荐
- TCP/UDP差异
首先,它 TCP是面向连接的.有序可靠的协议,然后UDP同TCP相对,那张脸无序连接不可靠的协议. 首先,为什么TCP它是面向连接的.由TCP如果传输是需要进行三次握手,这是client为了服务发送数 ...
- Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- 手机发送短信JS验证
function tj() { var phone = jQuery('#phone').val(); var code = jQuery('#verificationcode').val(); va ...
- 安装Windows7操作系统 - 初学者系列 - 学习者系列文章
Windows7是一款不错的操作系统,不过它的销量远没有XP那么大,但是不失为一款好的操作系统.下面就对Windows7操作系统的安装做下介绍. 1. 同样的,BIOS里设置光驱启动,把操作系统盘装 ...
- mysql基础之对库表操作
原文:mysql基础之对库表操作 查看一下所有的库,怎么办? Mysql>Show databases; 选库语句: Use 库名 创建一个数据库: create database 数据库名 [ ...
- linux下搭建SVN服务器完全手册-很强大!!!!!
系统环境 RHEL5.4最小化安装(关iptables,关selinux) + ssh + yum 一,安装必须的软件包. yum install subversion ( ...
- C语言JSON-RPC
近期对json-rpc比較感兴趣,思想非常easy,并且看到了非常多不同语言的实现.在github上 hmngomes 的 json-rpc-c (实现的是server端,基于TCP流),短 ...
- foreach,foreachelse
foreach,foreachelse Table of Contents目录 iteration 用于显示当前循环的执行次数[待考] first : 当前 foreach 循环第一次执行时 firs ...
- jsonp跨域+ashx
jsonp跨域+ashx(示例) 前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件 ...
- Linq无聊练习系列4--join练习
/**************join 练习*******************/ //对于1对多关系 var list =from c in ctx.T ...