.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. Struts2_配置文件

    1.结果跳转方式 <struts> <constant name="struts.devMode" value="true"></ ...

  2. MySQL 8.0.14 新的密码认证方式和客户端链接

    MySQL 8.0.14 新的密码认证方式和客户端链接 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   MySQL8.0在密码认证方式发生了改变,这也是有点小伙伴在MySQL创建 ...

  3. 《Go并发编程实战》读书笔记-语法概览

    <Go并发编程实战>读书笔记-语法概览 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客我们会快速浏览一下Go的语法,内容涉及基本构成要素(比如标识符,关键字,子 ...

  4. Java Hibernate中的悲观锁和乐观锁的实现

    锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种, ...

  5. 1.单件模式(Singleton Pattern)

    创建型模式---单件模式(Singleton Pattern)动机(Motivation):    在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性. ...

  6. 5.Hystrix-服务降级

    所谓降级,就是当某个服务出现异常之后,服务器将不再被调用,此时服务端可以自己准备一个本地的fallback回调,返回一个缺省值. 这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强,当然这也要看适合 ...

  7. 使用 boot-repair 对 Windows + Ubuntu 双系统引导修复

    问题描述:     由于在windows上进行更新/重装/修改了引导设置以后,windows会“自私”地重写引导,导致Ubuntu系统引导消失而无法选择Ubuntu启动.

  8. java四种权限修饰符(public > protected > (default) > private)

    权限修饰符在哪里可以访问 (default) : 表示什么权限修饰符都不写 位置 public protected (default) private 同一个类 yes yes yes yes 同一个 ...

  9. Mac 键盘符号 及VSCode快捷键 说明

    Mac 键盘符号说明 ⌘ == Command ⇧ == Shift ⇪ == Caps Lock ⌥ == Option ⌃ == Control ↩ == Return/Enter ⌫ == De ...

  10. hasnMap的基本操作 源码(三)

    一.初始化: hashMap有四种初始化方式: public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity ...