Singleton和静态类的区别

参阅本帖:

http://topic.csdn.net/u/20110611/14/B02F8E18-3571-4644-8C57-EFF2106AED1C.html

前些天在MS Press的一本名为C#编程导论中看到了一个概念:单体型。初读其定义,感到甚为不解,定义为,一个类只能实例化一次,并且提供一个全局访问点,它的典型实现手段是声明private类型的构造函数和static类型的方法。
        当时我就产生了两个困惑:1、如果构造函数为private类型的话怎么可能实例化呢?2、何为全局访问点。经过查看资料和同事沟通,我产生了我对单体型的理解:“我感觉单体型其实是不生成实例的,因为书上说实现单体型的一种典型的方法是使用private类型的构造函数和static类型的方法。这样的话就不能够对这个类进行实例化,而调用它的方法也只能通过类名来调用(可能就是所谓的全局访问点吧)。”
         我将我的理解发给了我的一个朋友(我称之为“老大”的C# 牛人),结果他说我把静态类和设计模式中的singleton模式弄混了。经过他的讲解和我的重新认识,我发现尽管两者有些地方很相似,但本质是不一样的。
         首先,designpattern中的singleton是一种设计模式(废话,但我是初学者,还望理解,呵呵),它提供的是一种解决实际问题的设计方案。基本上我们可以通过如下两种方式来实现singleton:
1、
public class Singleton
{
     private static Singleton instance = new Singleton();
     private Singleton() {}
     public static Singleton Instance()
    {
     return instance;
     }
}//通过第一次调类(调用类的静态函数Instance()来获取实例化后的对象)就实例化了此类的唯一一个对象,由于是静态的也就保证了只实例化一次。
2、第二种方式是将new操作放在了Instance()方法中进行,实际上没有什么本质上的区别。
      其次是静态类的问题,静态类与singleton最大的区别是静态类根本就不实例化,就这一点上跟抽象类是一致的。但也有所区别,抽象类是可以有实例成员的,而静态类没有;抽象类存在的唯一目的就是被继承,而静态类根本就不能被继承(static sealed class MyClass)。

你可能感兴趣的:(Singleton,职场,private,静态类,休闲)