• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

 

 

从C#的Singleton设计模式实现看.NET Framework特性对开发者的重要性  
 
 
class Singleton
{

public:

       static Singleton* Instance()
       {

              if(_instance==0)
              {
                     _instance=new Singleton;
              }

              return _instance;

}

protected:
       Singleton();

Private:
       Static Singleton* _instance;

};



Stington* Singleton::_instance=0;

 





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

    为了更好的理解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设计模式的意图。

本文不是要讨论设计模式,而只是想通过这个例子来说明一件事,那就是精通.NET Framework并将它灵活运用对实际应用开发的重要性。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
学会C#可以做什么发布时间:2022-07-14
下一篇:
C#中Monitor对象与Lock关键字的区别分析发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap