.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 ...
随机推荐
- centos6.5mini版安装及配置
1.安装选择界面,这个选第一个 2.镜像完整性检查,一般都是跳过SKIP 3.欢迎界面,进入安装了 4.语言选择,这个是没有中文的,用默认的英文就行 5.键盘布局,用默认的us 6.这里会给一个警告, ...
- HDU 1021(斐波那契数与因子3 **)
题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第 n 项的数字是否为 3 的倍数. 斐波那契数在到第四十多位的时候就会超出 int 存储范围,但是题目问的是是否为 3 的倍数,也就是模 3 ...
- Socket远程调试日志之 SocketLog的简单实用
github地址:https://github.com/luofei614/SocketLog 更多信息看这里:https://www.bbsmax.com/A/8Bz8L9Nyzx/ tp5配置co ...
- Entity Framework Code First 学习日记(1)精
我最近几天正在学习Entity Framework Code First.我打算分享一系列的学习笔记,今天是第一部分: 为什么要使用Code First: 近 年来,随着domain driven d ...
- SpringBoot系列: 与Spring Rest服务交互数据
不管是单体应用还是微服务应用, 现在都流行Restful风格, 下图是一个比较典型的使用rest的应用架构, 该应用不仅使用database数据源, 而且用到了一个Weather微服务, 另一方面, ...
- Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail
文件上传概述 1.文件上传的作用 例如网络硬盘,就是用来上传下载文件的. 在网络浏览器中,时常需要上传照片 2.文件上传对页面的要求 上 ...
- Handy Collaborator :用于挖掘out-of-band类漏洞的Burp插件介绍
本文我将介绍一个新的 Burp Suite插件Handy Collaborator.Burp Suite Collaborator是添加到Burp Suite的外部服务器,主要用于挖掘那些仅来自外部服 ...
- C# MVC EF框架 用事务
using System.Transactions; [HttpPost] public JsonResult Update(InfoModel list) { using (TransactionS ...
- springboot13 发布和监听事件
spring中的事件驱动模型Event(也叫发布订阅模式),是观察者模式的一个典型的应用 好处:业务解耦,在不影响原来业务逻辑的情况下,加入其它业务 场景: app上线后已实现用户注册功能,现需要在用 ...
- labelImg 工具
安装anaconda, 在anaconda prompt 下 执行 pyrcc4 -o resources.py resources.qrc python labelImg.py