C#实现单件模式的三种常用方法

本文实例讲述了C#实现单件模式的三种常用方法。分享给大家供大家参考。具体分析如下:

单件模式是一种设计模式,即保持同时只能创建一个实例,下面列出了C#实现单件模式的三种方法

方法1

public sealed Class Singleton
{
  private static ReadOnly Singleton instance = new Singleton();
  private Singleton(){}
  public static Singleton Instance
  {
  get
  {
   return instance;
  }
  }
}

方法2

public sealed Class ClassicSingleton
{
 private static ClassicSingleton instance;
 private static object SyncRoot = new Object ();
 private ClassicSingleton(){}
 public static ClassicSingleton Instance
 {
  get
  {
   if(instance == null)
   {
    lock (SyncRoot)
    {
     if(instance == null)
     {
      instance = new ClassicSingleton ();
     }
    }
   }
   return instance;
  }
 }
}

方法3

public Class Singleton
{
 private static Singleton instance;
 // Added a static mutex for synchronising use of instance.
 private static System.Threading.Mutex mutex;
 private Singleton(){}
 static Singleton ()
 {
  instance = new Singleton();
  mutex = new System.Threading.Mutex();
 }
 public static Singleton Acquire()
 {
  mutex.WaitOne ();
  return instance;
 }
 // Each call to Acquire () requires a call to Release()
 public static void Release()
 {
  mutex.ReleaseMutex();
 }
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C++设计模式之职责链模式

    前言 最近心情很差,因为生活,因为工作:所以想请几天假去丽江玩玩.就向项目经理提交了休假申请,我的项目经理向项目主管提交了我的休假申请,项目主管向部门经理提交了我的休假申请:最后,部门经理同意了我的休假申请.是的,一个简单的休假申请,需要这么复杂的流程,这也是一个公司保证它正常运行的必要.如果部门经理休假了,那么我的休假申请由谁审批呢?这个时候由项目主管代替部门经理进行审批.一个休假申请的审批制度有着严格的要求.而在处理这个请假审批时,各个人员就好比在一条链上的节点,我不知道我的请求由谁审批,但

  • 浅谈C#设计模式之工厂模式

    工厂模式和简单工厂有什么区别.废话不多说,对比第一篇例子应该很清楚能看出来. 优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了封装对象创建过程的优点. 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesignModel {     public inte

  • C#中单例模式的三种写法示例

    第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我-- 复制代码 代码如下: public class Singleton {     private static Singleton _instance = null;     private Singleton(){}     public static Singleton CreateInstance()     {         if(_instance == null)         {  

  • C#设计模式之观察者模式实例讲解

    前言 最近开始花点心思研究下设计模式,主要还是让自己写的代码可重用性高.保证代码可靠性.所谓设计模式,我找了下定义:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 为什么要提倡"Design Pattern(设计模式)"? 根本原因是为了代码复用,增加可维护性.因此这次我们来学习下设计模式,最后会通过C#语言来实现这些设计模式作为例子,深刻

  • 浅谈c#设计模式之单一原则

    单一原则: 程序设计时功能模块独立,功能单一更有助于维护和复用. 例如:个人计算机功能很多,如果想从中只拿出一个功能来制造一个新的东西是困难的.同时如果你的计算机开不机,同时你的计算器功能也不能用了. 在编程中如果一个类封装了太多功能和上面的结果是类似的. 单一职责原则 例1: 大家应该能看出来这个类图中的接口设计是有问题的,用户的属性和用户的行为没有分开.我们根据用户的属性和行为拆开这个接口. 重新拆分成两个接口,IUserBo 负责用户的属性,IUserBiz负责用户的行为.当我们实例化除U

  • C#组合模式实例详解

    本文实例讲述了C#组合模式.分享给大家供大家参考.具体如下: Company.cs如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { public abstract class Company { protected string name; public Company(string name) { t

  • C#职责链模式实例详解

    本文实例讲述了C#职责链模式.分享给大家供大家参考.具体如下: ConcreteHandler1.cs如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { public class ConcreteHandler1:Handler { public override void HandRequest(int

  • 浅谈C#设计模式之开放封闭原则

    在软件设计模式证这种不能修改,但可以扩展的思想也是最重要的设计原则,他就是开放-封闭原则 (OCP) 对于程序设计而言,怎么的设计才能面对需求的改变却可以保持相对的稳定,从而可以使得系统可以再第一个版本的基础上不断的推出新版本呢? 答案是在程序设计的时候使用开放封闭原则.   但是设计的同时,绝对对修改的关闭是不可能的,无论模块是多么的封闭,都存在一些无法对之封闭的变化,既然不可以完全的封闭,设计人员必须对他设计的模块应该对哪种变换的封闭做出选择,他必须猜测出最有可能发生变换的种类,然后构造抽象

  • C#命令模式用法实例

    本文实例讲述了C#命令模式.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 命令模式 { class Program { static void Main(string[] args) { Receiver r = new Receiver(); Command c = new ConcreteCommand(r

  • C#设计模式之单例模式实例讲解

    前言 最近开始花点心思研究下设计模式,主要还是让自己写的代码可重用性高.保证代码可靠性.所谓设计模式,我找了下定义:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 为什么要提倡"Design Pattern(设计模式)"? 根本原因是为了代码复用,增加可维护性.因此这次我们来学习下设计模式,最后会通过C#语言来实现这些设计模式作为例子,深刻

  • php设计模式 Chain Of Responsibility (职责链模式)

    复制代码 代码如下: <?php /** * 职责链模式 * * 为解除请求的发送者和接收者之间的耦合,而使用多个对象都用机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它 * */ abstract class Handler { protected $_handler = null; public function setSuccessor($handler) { $this->_handler = $handler; } abstract functio

  • 浅谈C#设计模式之代理模式

    代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口.根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理.远程代理.虚拟代理.缓冲代理等,它们应用于不同的场合,满足用户的不同需求 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using

随机推荐