意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。

1.简单实现(多线程有可能产生多个实例)

  1. public class CommonSigleton
  2. {
  3. /// <summary>
  4. /// 私有的对象
  5. /// </summary>
  6. private static CommonSigleton instance;
  7.  
  8. /// <summary>
  9. /// 构造方法为Private
  10. /// </summary>
  11. private CommonSigleton()
  12. {
  13.  
  14. }
  15.  
  16. /// <summary>
  17. /// 公有的属性
  18. /// </summary>
  19. public static CommonSigleton Instance
  20. {
  21. get
  22. {
  23. if(instance == null)
  24. {
  25. instance = new CommonSigleton();
  26. }
  27.  
  28. return instance;
  29. }
  30. }
  31. }

2.双重锁定实现(lock关键字)

  1. public class DoubLockSigleton
  2. {
  3. private static volatile DoubLockSigleton instance;
  4.  
  5. /// <summary>
  6. /// 辅助锁对象,本身没有意义
  7. /// </summary>
  8. private static object syncRoot = new Object();
  9.  
  10. /// <summary>
  11. /// 构造方法改为Private
  12. /// </summary>
  13. private DoubLockSigleton()
  14. {
  15.  
  16. }
  17.  
  18. public static DoubLockSigleton Instance
  19. {
  20. get
  21. {
  22. if (instance == null)
  23. {
  24. lock (syncRoot)
  25. {
  26. if (instance == null)
  27. instance = new DoubLockSigleton();
  28. }
  29. }
  30.  
  31. return instance;
  32. }
  33. }
  34. }

3.利用C#特性实现

  1. ///该类标记sealed阻止发生派生增加实例
  2. public sealed class DotNetSigleton
  3. {
  4. //变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
  5. //公共静态属性为访问实例提供了一个全局访问点。此外,由于构造函数是私有的,因此不能在类本身以外实例化
  6. private static readonly DotNetSigleton instance = new DotNetSigleton();
  7.  
  8. //由于 Singleton 实例被私有静态成员变量引用,因此在类首次被对Instance属性的调用所引用之前,不会发生实例化。
  9. private DotNetSigleton(){}
  10.  
  11. public static DotNetSigleton Instance
  12. {
  13. get
  14. {
  15. return instance;
  16. }
  17. }
  18. }

1.单件模式(Singleton Pattern)的更多相关文章

  1. 设计模式 - 单件模式(singleton pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...

  2. C#设计模式——单件模式(Singleton Pattern)

    一.概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例.这时就需要用到单件模式.二.单件模式单件模式保证一个类仅有一个实例,并提供一个访问它 ...

  3. 设计模式----创建型型模式之单件模式(Singleton pattern)

    单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...

  4. 单件模式Singleton来控制窗体被重复或多次打开

    本文转载:http://blog.csdn.net/a0700746/article/details/4473796 一般在百度搜一下,会出来一下内容,看来很好用.Singleton很方便的一个用处就 ...

  5. 设计模式(二)单件模式Singleton(创建型)

    SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...

  6. [MyBean-说明书]关于插件的单件模式(singleton),插件的共享模式

    [说明] 单件模式是一种用于确保整个应用程序中只有一个类实例. 想想我们的系统中有哪些方面可以应用到单件模式,比如大家常说的连接(ADOConnection)共享,其实就是指的单件模式. [MyBea ...

  7. 说说设计模式~单件模式(Singleton)

    单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...

  8. 夜话JAVA设计模式之单例模式(单件模式Singleton)

    单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点. 设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例. 下面来看金 ...

  9. java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern

    https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之   ...

随机推荐

  1. C#面向对象中类的静态成员与非静态成员的区别

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. ThinkPad紧凑型蓝牙键盘(0B47189)鼠标滚轮用法,F1到F12功能键的功能切换以及其他技巧

    入手小红点蓝牙键盘(ThinkPad Compact Bluetooth),手感极佳,小红点特别适合程序员工作,双手无需离开键盘就可以操作鼠标,完全解决肩部.腕部疲劳酸痛问题,程序员健康的大福音! 使 ...

  3. IIS6.0文件解析漏洞小结

    今天搞站,本来这个站是aspx的,webserver是IIS6.0的,进入后台之后,发现有一个上传图片的地方,于是,我就上传了一张asp/aspx的一句话图片木马,但是用菜刀连接的时候,没有成功get ...

  4. TFS2008 安装图解(详细版本)(转载)

    由于公司准备上TFS,最近开始学习搭建TFS环境,并为同事讲解TFS的使用,在虚拟 机中搭建测试环境,遇到了很多问题,总结成一篇博客,跟大家交流一下: 我是从微软公司官方网站下载的TFS 2008 1 ...

  5. 复合主键@IdClass

    有时一个实体的主键可能同时为多个,例如同样是之前使用的“CustomerEO”实体,需要通过name和email来查找指定实体,当且仅当name和email的值完全相同时,才认为是相同的实体对象.要配 ...

  6. java.net.SocketException:Software caused connection abort: recv failed 异常分析 +socket客户端&服务端代码

    java.net.SocketException:Software caused connection abort: recv failed 异常分析 分类: 很多的技术 2012-01-04 12: ...

  7. JS的运行机制

    代码块: JS中的代码块是指由<script>标签分割的代码段.JS是按照代码块来进行编译和执行的,代码块间相互独立(即就算代码块1出错,但不影响代码块2的加载和执行),但变量和方法共享. ...

  8. 关于angularjs 中自定义过滤器

    包子认为,在angularjs中,经常需要用到自定义过滤器,来过滤相应的功能,自定义过滤器非常的简单,我就直接贴代码啦 其中input就是你需要进行操作的对象,,,用法就直接就是 是不是很easy.. ...

  9. bzoj1816 扑克牌

    Description 你有n种牌,第i种牌的数目为ci.另外有一种特殊的牌:joker,它的数目是m.你可以用每种牌各一张来组成一套牌,也可以用一张joker和除了某一种牌以外的其他牌各一张组成1套 ...

  10. dedecms删除没有文章的标签

    要批量的删除织梦TAG标签,那我们就只能在数据库里做修改了. 登录数据库,在数据库里执行以下SQL语句: delete FROM dede_tagindex where typeid not in ( ...