单例模式(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";
        }

    }

外部调用:code

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

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

相关文章
相关标签/搜索