单例模式(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(); // 属性