设计模式之单例模式

何为单例模式?所谓的单例模式就是单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

  个人理解就是在系统中一个类仅有一个实例,在整个系统都可通过一个访问点访问到它。在创建对象时,只允许创建对象时,每次只允许创建一个对象,如果再想创建其他对象时,只能把上一个创建的对象释放掉或关闭,才能重新创建。

单例模式在生活中挺常见的,比如在去银行取钱时,如果同一个账户在同一时间在不同的地点进行取钱,那么就要用到单例模式,这样就可以保证,取钱是一个完整的过程,不会在中途打断,导致银行损失。

还有在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。

下面介绍一个单例模式的代码模板

namespace 单例模式代码
{
    class Program
    {
        static void Main(string[] args)
        {
            Singleton S1 = Singleton.GetInstance();
            Singleton S2 = Singleton.GetInstance();
            if(S1 ==S2 )//比较两次实例化后对象的结果是实例相同。
            {
                Console.WriteLine("两个对象时相同的实例");
            }
            Console.Read();
        }
        class Singleton
        {
            private static Singleton instance;
            private Singleton()//构造方法让其Private,这就毒死外界利用New创建此类实例的可能
            {

            }
            public static Singleton GetInstance()//全局访问点
            {
                if(instance==null) //实例不存在,则NEW一个 新实例,否则返回已有实例。
                {
                    instance=new Singleton ();
                }
                return instance ;
            }
        }
    }
}

单例模式的优点:

   1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。

   2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。

单例模式的缺点:

   1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。这个问题可以通过静态实例来解决。

   2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,所以当他们发现不能实例化一个类的时候会很惊讶。

   3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,但是这么做将导致单例类内部的指针指向不明。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值