.net中的设计模式---单例模式
.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中的设计模式---单例模式的更多相关文章
- [工作中的设计模式]单例模式singleton
一.模式解析: 单例模式是最简单和最常用的设计模式,面试的时候,不管新毕业的学生还是已经工作多年的筒子,对单例模式基本都能聊上两句.单例模式主要体现在如下方面: 1.类的构造函数私有化,保证外部不能直 ...
- 7.JAVA基础复习——JAVA中的设计模式单例模式
设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共 ...
- .net中的设计模式---单例模式,涉及lock的用法
.客户端代码 static void Main(string[] args) { Singleton singleton2 = Singleton.GetInstance(); Singleton s ...
- Django中settings设计模式(单例模式)
配置文件: 需求:配置文件,默认配置和手动配置分开,参考django的配置文件方案,默认配置文件放在项目容器内部,只让用户做常用配置. /bin/settings.py(手动配置) PLUGIN_IT ...
- JavaScript 中常见设计模式整理
开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...
- JS中常见设计模式总结
github: https://github.com/14glwu/FEInterviewBox/tree/master/JS%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F ...
- [Head First设计模式]抢票中的设计模式——代理模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]餐馆中的设计模式——命令模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- Spring中的设计模式
[Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用] [http://www.geek521.c ...
随机推荐
- smarty实例
login.php代码 <?phpinclude("../init.inc.php"); $smarty->display("login.html" ...
- python中import问题
https://blog.csdn.net/aspenstars/article/details/69605318 Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向 ...
- sping入门
SpringMVC 1.RequestMapping 处理地址映射请求 参数: value, produces, method, params, headers value:指定请求的实际地址 1.最 ...
- 如何修改Tomcat的默认项目发布路径
tomcat默认的项目发布目录是/webapp/ROOT,如果想自定义发布目录,应该怎么办呢? 修改配置文件 首先,修改$tomcat/conf/server.xml文件. 在server.xml文件 ...
- reportgen :python生产pptx
欢迎关注博主主页,学习python视频资源 https://www.cnblogs.com/gasongjian/p/8670925.html reportgen v0.1.8 更新介绍 这段时间,我 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- 用IntelliJ IDEA搭建第一个SpringBoot例子
前言:最近把IntelliJ IDEA弄好了,也偶然接触到了springboot这个新的微服务框架.发现这个框架简单但也有一些不足.听说springboot可以在140个字符内发布一个web应用.所以 ...
- Css单位px,rem,em,vw,vh的区别
px px就是pixel像素的缩写,相对长度单位,网页设计常用的基本单位.像素px是相对于显示器屏幕分辨率而言的 em em是相对长度单位.相对于当前对象内文本的字体尺寸(参考物是父元素的font-s ...
- 几本不错的数据仓库和Hadoop书籍
<<Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案>>, Matt Casters等著,初建军翻译<<Hadoop应用架构>> ...
- vue中axios 配置请求拦截功能 及请求方式如何封装
main.js 中: import axios from '................/axios' axios.js 中: //axios.js import Vue from 'vue' i ...