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

原文地址:https://www.cnblogs.com/Canaban/p/12987668.html