模式3:单例模式--C#语言描述

    “单例模式”,通过名字我们不难看出该模式指的是一个类只能被实例化一次,并且必须由自己来完成实例化的操作,整个系统都使用这个实例。
单例模式是一个简单而且实用的模式,我在我的系统中已经多处使用的该模式,其实我个人觉得多例模式比单例模式更实用一些。这两种模式的实现思想基本是一样的。
    为什么要使用单例模式,《Java与模式》一书中举的例子非常好,我在这里就不再举别的例子了,书上说:电脑可以配备多个网卡,但必须只能有一个网卡管理程序管理这些网卡,以免造成混乱。一台计算机可以配备多台打印机,但只能有一个Print Spooler,以免多个打印作业同时输出到打印机上。
    通过上面的两个例子,我想大家不难想到单例模式是什么样的模式了吧。
    我们看看下面运用单例模式的例子:   
SingletonPattern.cs
using System;

public class SingletonPattern
{
    
int currentNumber;

    
private static SingletonPattern sp = new SingletonPattern();

    
private SingletonPattern()
    
{
    }


    
public static SingletonPattern getInstance()
    
{
        
return sp;
    }


    
public int CurrentNumber
    
{
        
get
        
{
            
return currentNumber;
        }

        
set
        
{
            currentNumber 
= value;
        }

    }

}

//==========================
TestA.cs
using System;

public class TestA
{
    
public static void Main()
    
{
        SingletonPattern sp1 
= SingletonPattern.getInstance();
        Console.WriteLine(
"" + sp1.CurrentNumber);
        sp1.currentNumber 
= 5;
        Console.WriteLine(
"" + sp1.CurrentNumber);

        SingletonPattern sp2 
= SingletonPattern.getInstance();
        Console.WriteLine(
"" + sp2.CurrentNumber);

        
    }

}
    程序输出的结果是0 5 5,可见第二个得到的对象就是前面生成的对象。
我们再把单例模式总结一下:如果一个类是单例类,那么他必须由自己来实例化,这一点我们可以通过将构造函数的访问级别设为私有的来处理。一个单例类必须只能实例化一次,我们在类的内部提供一个实例,把构造函数私有化,这样就保证了只有一个实例。它必须可以为整个系统提供这个实例,我们在例子中看到了,通过提供一个静态的方法,将单例类自己生成的实例提供给整个系统。
    关于单例类的讨论还有很多,比如有状态和无状态等等,我们在以后讨论

posted on 2005-06-14 15:24  chance_win  阅读(410)  评论(0)    收藏  举报

导航