为什么要使用单例模式.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为什么要使用单例模式

为什么要使用单例?有几种单例的认识 2010-11-14 16:10 为什么好多考官都要考单例模式,现将自已的理解做一下简单介绍:   其实程序最初的思想是用NEW去创建一个实例对象,然后我们使用这个实例对象去做一些相关的操作,那如果有多个线程同时访问,那意味着要NEW多个实例对象,这样不仅使服务器性能下降,而且占用内存会越来越大,线程越多,占用内存越大。例:   当我们需要访问的时候总是需要NEW一个CONNECT实例,然后才能用实例进行增删改的相关操作,然而这对于一个WEB客户端,启动一个线程,在每次访问的时候都会去与服务器后台打交道,这意味着,假如有一万个Web客户端将要启动一万个线程都去访问服务器那将会,NEW一万个实例对象,不公是非常占内存,而且性能也会急剧下降,后果可想而知......,因此优秀的程序员们绞尽脑汁的去优化自已的程序。有人提问:在这一万个WEB客户端线程间,是否能将CONNECT只用一个实例,让每一个WEB客户端都去访问这个连接?答案就是单例。如果我们创建一个单例程序,然后在服务器启动后,自始自终,服务器只对某个类进行一次实例,这就是单例。它不仅能节省服务器的内存,也能提高服务器的性能。如果平凡的使用NEW也会耗相当大的内存,所以在能够多个线程之间共用一个对象的时候,尽量用单例模式去实现该程序。   SPRING是我们每个人都非常熟知的开源框架。SPRING中大量使用了单例去初始化一些BEAN。这使得我们N多WEB客户端在请求的时候不需要在NEW一些东西,只需要去得到单例的对象去操作,就可以了,它的依赖注入也只是将这些单例的实例对象得到然后进行注入到另一个对象,进行使用。 ????????Ext JS中也使用了不少的单例模式,JS使用单例,可以对客户浏览器中的内存得到充分的利用。 单例模式的要点   显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。在下面的对象图中,有一个单例对象,而客户甲、客户乙 和客户丙是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。   一些资源管理器常常设计成单例模式。   在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。   需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件。   需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可政出多头。   这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。   在java中,可以使用以下这种方式使用单例模式创建类的实例:   public class MyBean {   private static MyBean instance = null;   private MyBean(){   //do something   }   public static synchronized MyBean getInstance(){   if(instance == null){   instance = new MyBean();   }   return instance;   }   }   当一个类的实例可以有且只可以一个的时候就需要用到了。为什么只需要有一个呢?有人说是为了节约内存。本人对这个说法持保留态度。只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由。我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?   Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。   一般Singleton模式通常有两种形式:   第一种形式: 也是常用的形式。   public class Singleton {   private static Singleton instance = null;   pri

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档