开启左侧

C#之单例与多例模式(转)

[复制链接]
绝地武士 发表于 2016-6-20 15:01:36 | 显示全部楼层 |阅读模式
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式有以下特点:
单例类只能有一个实例。
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。
一个典型的单例类的实现如下所示:其中构造子私有表示子类不能被继承。
  1. public class Singleton
  2.     {
  3.       private static Singleton m_instance = null;

  4.       private Singleton()
  5.       {
  6.       }

  7.       public static Singleton getInstance()
  8.       {
  9.         if(m_instance==null)
  10.         {
  11.           m_instance=new Singleton();
  12.         }
  13.         return m_instance;
  14.       }
  15.     }
复制代码



所谓多例模式,实际上就是单例模式的自然推广,单例类一般情况下只可以有一个实例,但单例类也可以推广到允许有限个实例,这种模式就是多例模式。作为对象的创建模式,多例模式有以下特点:

多例类可以有多个实例。
多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
多例类分为有上限多例类与无上限多例类。
一个有上限的多例类已经把实例的上限当作逻辑的一部分,并建造到了多例类的内部。如下:

  1. public class Multiton
  2. {
  3.     private static Multiton instance1=null;
  4.     private static Multiton instance2=null;
  5.     private Multiton()
  6.     {
  7.     }

  8.     public static Multiton getInstance(int whichOne)
  9.     {
  10.       if(whichOne==1)
  11.       {
  12.         if(instance1==null)
  13.         {
  14.           instance1=new Multiton ();
  15.         }
  16.         return instance1;
  17.       }
  18.       else
  19.       {
  20.         if(instance2==null)
  21.         {
  22.           instance2=new Multiton ();
  23.         }
  24.         return instance2;
  25.       }
  26.     }
  27. }
复制代码

多例类的实例数目不需要有上限,实例数目没有上限的多例模式就叫做无上限多例模式。由于没有上限的多例类对实例的数目是没有限制的,因此,虽然这种多例模式是单例模式的推广,但是这种多例类并不一定能够回到单例类。一般采用聚集管理所有的实例。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表