.net设计模式:

Net设计模式实例之单例模式( Singleton Pattern)

 一 : 单例模式的简介:(Brief Introduction)

单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它。简单说就是单一模式:仅能有你一个人访问;

二、解决的问题(What To Solve)

当一个类只允许创建一个实例时,可以考虑使用单例模式。

三.单例模式分析(Analysis

Singleton,定义一个私有变量instance;私有构造方法Singleton()和方法GetInstance();

私有变量instance:

单例模式结构:

private static Singleton instance;

私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。

private Singleton()

{

}

方法GetInstance(), 此方法是本类实例的唯一全局访问点。

public static Singleton GetInstance()

{

//如实例不存在,则New一个新实例,否则返回已有实例

if (instance == null)

{

instance = new Singleton();

}

return instance;

}

单例模式代码

1、单例模式类Singleton

public class Singleton

{

private static Singleton instance;

/// <summary>

/// 程序运行时,创建一个静态只读的进程辅助对象

/// </summary>

private static readonly object _object = new object();

/// <summary>

/// 构造方法私有,外键不能通过New类实例化此类

/// </summary>

private Singleton()

{

}

/// <summary>

/// 此方法是本类实例的唯一全局访问点

/// (双重加锁 Double-Check Locking)

/// </summary>

/// <returns></returns>

public static Singleton GetInstance()

{

//先判断实例是否存在,不存在再加锁处理

if (instance == null)

{

//在同一时刻加了锁的那部分程序只有一个线程可以进入,

lock (_object)

{

//如实例不存在,则New一个新实例,否则返回已有实例

if (instance == null)

{

instance = new Singleton();

}

}

}

return instance;

}

}

2、客户端代码

static void Main(string[] args)

{

Singleton singleton2 = Singleton.GetInstance();

Singleton singleton3 = Singleton.GetInstance();

if (singleton2 ==singleton3)

{

Console.WriteLine("实例singleton2与实例singleton3相同!");

}

Console.ReadKey();

}

单例模式也可以不用枷锁,例如在一个类中使用三层技术调用类:

#region  获取自身的单例模式:UserInfo 代表了Bll层中的类文件

private static UserInfo instance;

public static UserInfo GetInstance()

{

if (instance==null)

{

instance = new UserInfo ();

}

return instance;

}

#endregion

在表示层调用:

.BLL . UserInfo   bll = BLL. UserInfo.GetInstance();

.net中的设计模式---单例模式的更多相关文章

  1. [工作中的设计模式]单例模式singleton

    一.模式解析: 单例模式是最简单和最常用的设计模式,面试的时候,不管新毕业的学生还是已经工作多年的筒子,对单例模式基本都能聊上两句.单例模式主要体现在如下方面: 1.类的构造函数私有化,保证外部不能直 ...

  2. 7.JAVA基础复习——JAVA中的设计模式单例模式

    设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共 ...

  3. .net中的设计模式---单例模式,涉及lock的用法

    .客户端代码 static void Main(string[] args) { Singleton singleton2 = Singleton.GetInstance(); Singleton s ...

  4. Django中settings设计模式(单例模式)

    配置文件: 需求:配置文件,默认配置和手动配置分开,参考django的配置文件方案,默认配置文件放在项目容器内部,只让用户做常用配置. /bin/settings.py(手动配置) PLUGIN_IT ...

  5. JavaScript 中常见设计模式整理

    开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...

  6. JS中常见设计模式总结

    github: https://github.com/14glwu/FEInterviewBox/tree/master/JS%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F ...

  7. [Head First设计模式]抢票中的设计模式——代理模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  8. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  9. Spring中的设计模式

    [Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用]    [http://www.geek521.c ...

随机推荐

  1. 离线提取目标机hash

    ##看了大佬的文章学习到一个姿势在此将其记录一下复现过程 github项目地址:https://github.com/SecureAuthCorp/impacket.git python setup ...

  2. QT: 自定义断言;

    使用Qt  creator + mingw + gdb进行qt项目开发时,应用Q_ASSERT进行断言总是会出现问题:  断言失败,程序崩溃而不是停止: 采用自定义断言能完美解决该问题(方法取自于国外 ...

  3. break #立即终止本次循环

    #!/user/bin/python# -*- coding:utf-8 -*-# print(111)# while True:# print(222)# print(333)# break #立即 ...

  4. maven_eclipse配置maven

    1.eclipse配置3.3.9版本的maven 2.修改仓库位置

  5. 面向对象【day08】:动态导入模块(八)

    本节内容 1.概述 2.知识回顾 3.动态导入模块 一.概述 我们之前导入模块都是用import,或者from ... import ....这种模式去导入模块,那如果我们如何实现只用字符串就可以导入 ...

  6. python--编写用例脚本

    from appium import webdriverimport time desired_caps = {}desired_caps['platformName'] = 'Android'des ...

  7. Git(查看修改记录)

    我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version c ...

  8. Tips and Tricks for Debugging in chrome

    Tips and Tricks for Debugging in chrome Pretty print On sources panel ,clicking on the {} on the bot ...

  9. 有关mysql的innodb_flush_log_at_trx_commit参数

    一.参数解释 0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下在事务提交的时候,不会主动触发写入磁盘的操作. 1:每次事务 ...

  10. 声源测向: TDOA-GCC-PATH方法

    收藏链接: http://www.funcwj.cn/2018/05/10/gcc-phat-for-tdoa-estimate/