参阅本帖:
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)。
本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/585875,如需转载请自行联系原作者