构建模式—单例模式 【转】

引言

很多程序设计都或多或少的涉及设计模式。现在大约有23种设计模式,分类如下:

I] Creational Patterns (构建模式)

  1. Singleton (单例模式)
  2. Factory (工厂模式)
  3. Abstract Factory (抽象工厂)
  4. Builder (创建模式)
  5. Prototype(原型模式)

II] Structural Patterns (结构化模式)

  1. Adapter (适配器模式)
  2. Bridge (桥模式)
  3. Composite (复合模式)
  4. Decorator (装饰模式)
  5. Facade (门面模式)
  6. Flyweight (享元模式)
  7. Proxy(代理模式)

III] Behavioral Pattern (行为模式)

  1. Chain Of Responsibility (职责链模式)
  2. Command (命令模式)
  3. Interpreter (解释器模式)
  4. Iterator (迭代器模式)
  5. Mediator (中介者模式)
  6. Memento (备忘录模式)
  7. Observer (观察者模式)
  8. State (状态模式)
  9. Strategy (策略模式)
  10. Template Method (模板方法)
  11. Visitor(访问者模式)

这篇文章讨论单例模式的实现。

概念

设计模式的最显著的优点如下:

    ◆它们给你提供一个解决已有的并经过项目考验的类似问题的方案。这个解决方案促进复杂关系模块向着最低化耦合发展。它们将系统中可能存在的变化孤立起来,使整个系统更容易理解和维护。

    ◆设计模式是设计人员间的交流更为有效。软件专业人员可以马上在脑海中勾画出一个高水平的设计方案,并想到以前解决类似问题的设计模式的名称。

单例模式:在单例模式中,对活动的单例类只有一个实例。对单例类的所有实例化得到的都是相同的一个实例。这个模式也提供一个全局的接口来访问这个类的实例。

类图

时序图


实现

以下步骤实现单例模式:

第一步:

    创建一个Console Application的项目,命名为SingletonTest

第二步:
    加入一个名为
Singleton的类文件,并且加入一下代码:

/// <summary>
/// Summary description for Singleton.
/// </summary>

public class Singleton
{
//Fields
private static Singleton instance;

/// <summary>
/// Standard default Constructor 
/// </summary>

protected Singleton() {}

/// <summary>
/// Static method for creating the single instance 
/// of the Constructor
/// </summary>
/// <returns></returns>

public static Singleton Instance()
{
// initialize if not already done 
if( instance == null )
instance 
= new Singleton();

// return the initialized instance of the Singleton Class
return instance;
}

}


第三步:

创建一个客户端类,来访问这个单例类,如下:

/// <summary>
/// Summary description for Client.
/// </summary>

class Client
{
/// <summary>
/// The main entry point for the application.
/// </summary>

[STAThread]
static void Main(string[] args)
{
// Constructor is protected -- cannot use new
Singleton s1 = Singleton.Instance();
Singleton s2 
= Singleton.Instance();
if( s1 == s2 )
Console.WriteLine( 
"The same instance" );
Console.ReadLine();
}

}
 

第四步:

执行这个程序得到如下结果:


 

结论

这样我们用.Net framwork实现了一个单例模式的例子。像所有理论一样,单利模式也有它的优点和缺点。


单例模式的优点:

    1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。

    2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。


单例模式的缺点:

    1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。这个问题可以通过静态实例来解决。

    2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,所以当他们发现不能实例化一个类的时候会很惊讶。

    3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,但是这么做将导致单例类内部的指针指向不明。

posted on 2009-07-03 15:33  ToKens  阅读(239)  评论(1编辑  收藏  举报