欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

大话设计模式:单例模式

程序员文章站 2022-06-05 14:06:20
...

一、什么是单例模式

一个类保证只有一个实例对象,并提供一个访问它的全局访问点

通常我们可以有一个变量可以让 类被全局访问,但不可避免被实例出多个对象,让类自身管理这个实例过程,使得实例只存在一个,且提供一个全局访问的 方法。

UML图

大话设计模式:单例模式

私有一个 自身的实例,私有构造函数,公开一个获得唯一实例的方法。

二、适用场景

1、要求生产唯一***。
2、游戏管理器只需要一个。大家用的话都是用的它。
3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

三、优缺点

优点
在内存里只有一个实例,减少了内存开销
避免对资源的多重占用
缺点
没有接口,与单一职责冲突

四、大话中的例子

点击生成窗口的例子,每点一次就生成一次, 使用单例模式,就不再有这个问题.

五、我的例子

using System;


namespace SingletonMode
{
    class Program
    {
        static void Main(string[] args)
        {
            Singleton s1 = Singleton.GetInstance();
            Singleton s2 = Singleton.GetInstance();
            if (s1 == s2)
                Console.WriteLine("相同");
            Console.WriteLine(Singleton.GetInstance().adress);
        }
    }

    class Singleton
    {
        private static Singleton one;
        private static readonly object syncRoot = new object();

        private Singleton() { }

        public static Singleton GetInstance()
        {
            if (one == null)
            {
                lock (syncRoot)//只有一个线程能进入
                {
                    if (one == null)
                    {
                        one = new Singleton();
                    }
                }
            }
            return one;
        }

        public string adress = "lololo";
    }
}

运行结果

大话设计模式:单例模式

饿汉式单例

    sealed class SingletonH
    {
        static readonly SingletonH one = new SingletonH();
        private SingletonH() { }
        public static SingletonH GetInstance()
        {
            return one;
        }
    }

PS:单例模式分懒汉式和饿汉式,需要注意多线程的情况.

相关标签: 设计模式