设计模式——3.单例模式

单例模式(singleton)简介:

单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。使用单例模式能够让设计师快速获取提供某项服务或者功能的对象,可以省去层层传递对象的困扰。

单例模式在实现时,需要编程语言的支持,需要编程语言具有静态类属性、静态类方法以及可重新定义构造函数的访问修饰符,具有这3项语句功能的编程语言就可以实现单例模式。

单例模式结构

Singleton单例类:


    public class Singleton
    {
        private static Singleton _instance;

        private Singleton() { }

        public static Singleton Instance {
            get {
                if (_instance == null) {
                    _instance = new Singleton();
                }
                return _instance;
            }
        }

    }

其中静态类方法Instance用来获取_instance属性,上方代码使用了C#的getter存取运算符功能来实现Instance方法,使Singleton.Instance()的调用方式,写为Singleton.Instance的方式,减少的一对括号对于后续代码维护有着一定程度的帮助。

客户端测试代码:


        static void Main(string[] args)
        {
            Singleton s1 = Singleton.Instance;
            Singleton s2 = Singleton.Instance;

            if (s1 == s2 ) {
                Console.WriteLine("The only one Singleton instance .");
            }

            Console.ReadKey();
        }

或者直接使用方法方式获取:


    public class Singleton
    {
        private static Singleton _instance;

        private Singleton() { }

        public static Singleton GetInstance()
        {
            if (_instance == null)
            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }

    //使用时:
    //Singleton s = Singleton.GetInstance();

单例模式优点及缺点

优点:
单例模式通过将类的构造方法私有化,让类对象只能够在类的成员方法中产生,配合类的静态成员属性在类中只会出现一个的限制,让系统可以有效的限制数量,因此,单例模式可以有效的限制类对象产生的地点和时间,同时也可以防止类对象被随意产生而造成系统错误。

缺点:

单例模式使用方便,但是在挑选适合以单例模式实现的类时,需要认真挑选,不能够滥用单例;其次,单例模式违反了“开闭原则”,因为通过Instance方法获取的对象是“实现类”不是“接口类”,该方法返回的对象是包含了实现细节的实体类,当后续设计变更后者需求改变时,程序员无法将它替代为其他类,只能改变实现类中原有的程序代码,无法满足“对修改关闭”的要求。

猜你喜欢

转载自www.cnblogs.com/sylvan/p/9064150.html