设计模式——单例模式-阿里云开发者社区

开发者社区> 开发与运维> 正文

设计模式——单例模式

简介:

       学习设计模式也有一段时间了,看了些书籍也一直在园子里关注设计模式的文章,无奈动手比较少,仅仅几个设计模式拿来应用过,其它的基本上仅限于了解概念而 已。悲哉!悲哉!前阵子在项目里居然发现可以应用单例模式,呵呵,颇有些惊喜。故写下面的。以此巩固和梳理自己的知识,加深理解。

  什么叫单例模式? 单例模式又叫做单态模式或者单件模式
     概念1(GOF):单例模式(Single)是指保证一个类仅有一个实例,并提供一个访问它的全局访问点 
     概念2:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类

     单例模式又分为:

  一 懒汉式单例:在类被加载的时候,唯一实例已经被创建     

     二、饿汉式单例 在类加载的时候不创建单例实例。只有在第一次请求实例的时候的时候创建,并且只在第一次创建后,以后不再创建该类的实例。

  三、登记式单例  这个单例实际上维护的是一组单例类的实例,将这些实例存放在一个Map(登记薄)中,对于已经登记过的实例,则从工厂直接返回,对于没有登记的,则先登记,而后返回。

  单例类的特点:

     1、单例类只能有一个实例
  2、单例类必须自己给自己创建自己的唯一的实例
     3、单例类必须给其他所有对象提供这一实例

一个类的对象的产生是由类构造函数来完成的,如果想限制对象的产生,就要将构造函数变为私有的(至少是受保护的),使得外面的类不能通过引用来产生 对象;同时为了保证类的可用性,就必须提供一个自己的对象以及访问这个对象的静态方法。通常我们可以让一个全局变量使得一个对象被访问。但它不能防止你实 例化多个对象,一个最好的方法就是,让类自身保存它的唯一实例,这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问改实例的方法
  

什么时候用单例模式?当某个类的初始化比较耗时,耗资源的时候,比如加载某些配置文件等,一般会选择单例模式。
单例模式一般用在你不想实例化多个对象的地方 ,比如WinForm里MDI窗口内的子窗体。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章