Singleton(单例模式)
2009-06-08 11:05 周国选 阅读(828) 评论(0) 收藏 举报概念
设计模式的最显著的优点如下:
◆它们给你提供一个解决已有的并经过项目考验的类似问题的方案。这个解决方案促进复杂关系模块向着最低化耦合发展。它们将系统中可能存在的变化孤立起来,使整个系统更容易理解和维护。
    ◆设计模式是设计人员间的交流更为有效。软件专业人员可以马上在脑海中勾画出一个高水平的设计方案,并想到以前解决类似问题的设计模式的名称。
单例模式:在单例模式中,对活动的单例类只有一个实例。对单例类的所有实例化得到的都是相同的一个实例。这个模式也提供一个全局的接口来访问这个类的实例。
类图
时序图
实现
以下步骤实现单例模式:
第一步:
创建一个Console Application的项目,命名为SingletonTest。
第二步:
    加入一个名为Singleton的类文件,并且加入一下代码:
 /// <summary>
/// <summary> /// Summary description for Singleton.
/// Summary description for Singleton. /// </summary>
/// </summary> public class Singleton
public class Singleton {
{ //Fields
//Fields private static Singleton instance;
private static Singleton instance;
 /// <summary>
/// <summary> /// Standard default Constructor
/// Standard default Constructor  /// </summary>
/// </summary> protected Singleton() {}
protected Singleton() {}
 /// <summary>
/// <summary> /// Static method for creating the single instance
/// Static method for creating the single instance  /// of the Constructor
/// of the Constructor /// </summary>
/// </summary> /// <returns></returns>
/// <returns></returns> public static Singleton Instance()
public static Singleton Instance() {
{ // initialize if not already done
// initialize if not already done  if( instance == null )
if( instance == null ) instance = new Singleton();
instance = new Singleton();
 // return the initialized instance of the Singleton Class
// return the initialized instance of the Singleton Class return instance;
return instance; }
} }
}第三步:
创建一个客户端类,来访问这个单例类,如下:
 /// <summary>
/// <summary> /// Summary description for Client.
/// Summary description for Client. /// </summary>
/// </summary> class Client
class Client {
{ /// <summary>
/// <summary> /// The main entry point for the application.
/// The main entry point for the application. /// </summary>
/// </summary> [STAThread]
[STAThread] static void Main(string[] args)
static void Main(string[] args) {
{ // Constructor is protected -- cannot use new
// Constructor is protected -- cannot use new Singleton s1 = Singleton.Instance();
Singleton s1 = Singleton.Instance(); Singleton s2 = Singleton.Instance();
Singleton s2 = Singleton.Instance(); if( s1 == s2 )
if( s1 == s2 ) Console.WriteLine( "The same instance" );
Console.WriteLine( "The same instance" ); Console.ReadLine();
Console.ReadLine(); }
} }
} 
第四步:
执行这个程序得到如下结果:
结论
这样我们用.Net framwork实现了一个单例模式的例子。像所有理论一样,单利模式也有它的优点和缺点。
单例模式的优点:
    1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
    2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
单例模式的缺点:
1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。这个问题可以通过静态实例来解决。
2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,所以当他们发现不能实例化一个类的时候会很惊讶。
3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,但是这么做将导致单例类内部的指针指向不明。
 
                    
                     
                    
                 
                    
                

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号