2020年5月30日星期六

单例模式(Singleton Pattern)

单例模式(Singleton Pattern)


Singleton Pattern 属于创造型设计模式,提供一种创建对象的方法,涉及一个单一类的实例,确保一个类只创建一个对象,提供访问唯一对象的方法,可以直接访问,不需要创建。

  • 单一类只有一个实例
  • 类必须自己创建自己的实例
  • 给其他调用对象提供访问该类实例的方法

目的:一个类只创建一个实例
优点:减少全局使用该类的频繁创建与销毁,节省系统资源,避免对资源的多重占用
缺点:没有借口,不可以被继承,与单一职责冲突,一个类应该只关心自己内部逻辑,不关心外部调用实例情况

实例应用:
多进程多线程,操作同一个文件时,多个线程同时操作一个文件的时候,所有文件应该通过同一个实例操作

实现:

  • 构造函数是私有的
  • 判断系统是否已经存在该实例,有就返回,无则创建

Code:

 public class SingletonObject {  // 唯一实例  private static SingletonObject singleton;  // 私有构造函数(限制外部实例化)  private SingletonObject()  {  }  // 方式一:		  /// <summary>  /// 提供外部获取该类实例的静态方法(可带参数)  /// </summary>  /// <returns>SingletonObject</returns>  public static SingletonObject getInstance1()  {   if (singleton == null)    singleton = new SingletonObject();   return singleton;  }  // 方式二:  // 只读属性(无法带参数)  public static SingletonObject getInstance2  {   get   {    if (singleton == null)     singleton = new SingletonObject();    return singleton;   }  }	    /// <summary>  /// 类内部方法  /// </summary>  /// <returns></returns>  public string FuncName()  {   return "This is Singleton Pattern";  } }

外部调用:

string s1 = SingletonObject.getInstance1().FuncName(); // 方法

string s2 = SingletonObject.getInstance2.FuncName(); // 属性