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(); // 属性