大话设计模式:单例模式

一、什么是单例模式
一个类保证只有一个实例对象,并提供一个访问它的全局访问点

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

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:单例模式分懒汉式和饿汉式,需要注意多线程的情况.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值