知识大全 从C#的Singleton设计模式实现看.NETFramework特性对开发者的重要性

Posted

篇首语:我们越是忙越能强烈地感到我们是活着,越能意识到我们生命的存在。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 从C#的Singleton设计模式实现看.NETFramework特性对开发者的重要性相关的知识,希望对你有一定的参考价值。

从C#的Singleton设计模式实现看.NETFramework特性对开发者的重要性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  近来 我在学习如何在C#语言中使用设计模式中读到一些资料 其中有关Singleton设计模式引起了我的注意

    

  学过设计模式的开发者都知道Singleton模式 我想简要地解释一下这个设计模式是为那些尚未学习过设计模式的朋友 Singleton设计模式是告诉您如何在你的应用程序创建一个唯一类示例的全局对象 也就是说 这个对象只能被实例化一次 这个对象同时提供一个访问它的一个全局的访问点 这种对象如应用程序中的窗口管理器或者是打印假脱机 数据库连接池等

    

  现在让我们先看一下设计模式一书中对Singleton模式的C++实现(为了方便比较 我把实现的代码写成内联的方式)

    

  class Singleton

    

  

    

  public:

    

  static Singleton* Instance()

    

  

    

  if(_instance== )

    

  

    

  _instance=new Singleton;

    

  

    

  return _instance;

    

  

    

  protected:

    

  Singleton();

    

  Private:

    

  Static Singleton* _instance;

    

  ;

    

  Stington* Singleton::_instance= ;

    

  这里我不想对上述的代码作解释 大家可以参阅本文后面提供的参考文献

    

  为了更好的理解C# 我这里也出示一下Java中的Singleton模式实现代码(不是有人认为C#是对Java的剽窃吗J)

    

  class Singleton

    

  

    

  public Singleton Instance()

    

  

    

  if(_instace==null)

    

  

    

  synchronized (Class forName( Singleton ))

    

  

    

  if (_instance == null)

    

  

    

  _instance = new Singleton();

    

  

    

  

    

  

    

  return _instance;

    

  

    

  protected Singleton()

    

  private static Singleton _instance = null;

    

  

    

  在上述的Java代码中使用了双重检测机制 来避免多个线程的Singleton实例化问题 同样 我也不想对上述的代码做任何解释

    

  首先 让我们看一下C#中类似Java的实现

    

  class Singleton

    

  

    

  public static Singleton Instance()

    

  

    

  if(_instance==null)

    

  

    

  lock (typeof(Singleton))

    

  

    

  if(_instace==null)

    

  

    

  _instance=new Singleton();

    

  

    

  

    

  

    

  return _instance;

    

  

    

  protected Singleton()

    

  private static volatile Singleton _instance=null;

    

  

    

  现在 是我们睁大眼睛的时候了 下面是利用 NET Framework平台优势实现Singleton模式的代码

    

  sealed class Singleton

    

  

    

  private Singleton();

    

  public static readonly Singleton Instance=new Singleton();

    

  

    

  非常吃惊是不是 不仅代码减少了许多 同时也解决了线程问题带来的性能上损失 有避免了编译器优化的问题 上述的代码真的能正常工作吗?如果能 那么它又是怎样工作的呢?

    

  注意到 Singleton类被声明为sealed 以此保证它自己不会被继承 其次没有了Instance的方法 将原来_instance成员变量变成public readonly 并在声明时被初始化 通过这些改变 我们确实得到了Singleton的模式 原因是在JIT的处理过程中 如果类中的static属性被任何方法使用时 NET Framework将对这个属性进行初始化 于是在初始化Instance属性的同时Singleton类实例得以创建和装载 而私有的构造函数和readonly(只读)保证了Singleton不会被再次实例化 这正是Singleton设计模式的意图

    

cha138/Article/program/net/201311/12319

相关参考

知识大全 C# “Singleton” 模式四种实现方法

C#“Singleton”模式四种实现方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大家一

知识大全 Singleton模式

最简单的设计模式学习:Singleton模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  学习

知识大全 设计模式之Singleton(单态模式)

设计模式之Singleton(单态模式)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要讨论

知识大全 在Java中应用设计模式Singleton

在Java中应用设计模式Singleton  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &nb

知识大全 单件模式singleton的理解

  Singleton模式是一个较为简单的模式下面的代码就可以建立一个Singlton模式的例子这是一个写系统日志的类实际应用的意义在于在内存中只保存一个实例避免开辟多个功能相同的工具类实例而耗用系统

知识大全 在Java中应用设计模式之Singleton

在Java中应用设计模式之Singleton  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  基本

知识大全 23种设计模式的Java版--Singleton(单例)

23种设计模式的Java版--Singleton(单例)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 .Net 单例模式(Singleton)

.Net单例模式(Singleton)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!单例模式的意思

知识大全 C#中调用Windows API的要点

C#中调用WindowsAPI的要点  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在NetFr

知识大全 从Java类库看设计模式

从Java类库看设计模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多时候对于一个设计来说