2024年10月单例模式多用于io方面(什么是单例模式)
⑴单例模式多用于io方面(什么是单例模式
⑵例模式可以说是GOF设计模式中最为简单的模式,也是背负骂名最多的模式。不过一直以来,我对许多类似关于它是最烂和反模式的评价却不尽以为然。模式本身很简单,除了牵涉多线程安全问题引起的一点罗唆外。所以,我不太想讨论GOF提供的关于该模式的参考实现。我所关注的是它背后带来的对问题的看法和思考方式。我们先看看单例模式出现的背景很存在的意义。单例模式通俗来讲就是确保类只有一个实例。那么好,我们问一下,为什么要确保类只有一个实例呢?其实无非是两个方面的作用:一、想控制资源的使用,它又体现在两个方面,其中之一是控制实例数目的产生来节约资源,其二通过线程同步控制资源的并发访问;二、想作为一种通信媒介,在不建立直接关联的条件下让不相关的两个程序进行通信,尤其是多线程。第二点,我说的有些抽象,简单讲吧,就类似于大家基于一个黑板讨论东西,而不关心参与讨论的对象。单例就取了黑板的作用。
⑶单例模式的作用及创建方法
⑷单例模式作为常见的设计模式之一,在java的项目开发中会时常的用到。JavaSingleton模式即保证在JVM运行时,一个类Class只有一个实例存在。
⑸单例模式有什么好处呢?最简单的一个例子就是网站计数器的设计了。当我们想要统计当前网站的在线人数时,一个显而易见的问题就是并发所带来的线程安全问题,当我们对这个计数器(网站人数在同一时刻进行操作,再保存计数时就会造成数据的混乱,后者覆盖前者的结果。一种解决方案就是把这个计数器设置为唯一对象,所有人都必须共用同一份数据。实现唯一对象最好的解决办法就是让类自己负责保存它的唯一实例,并且让这个类保证不会产生第二个实例,同时提供一个让外部对象访问该实例的方法。自己的事情自己办,而不是由别人代办,这非常符合面向对象的封装原则。
⑹单例模式的三个特点:
⑺只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。
⑻该方法在多线程情况下有可能重复创建实例,以下是线程安全的懒汉模式
⑼这种模式的缺点是加锁造成了效率下降,并且在绝大部分情况下是不需要同步的。使用双重检验锁(DCL,只在第一次初始化的时候进行同步加锁
⑽该方式在类加载的时候就被实例化了。
⑾这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,它跟饿汉不同的是(很细微的差别:饿汉方式是只要Singleton类被装载了,那么instance就会被实例化(没有达到lazyloading效果,而这种方式是Singleton类被装载了,instance不一定被初始化。因为SingletonHolder类没有被主动使用,只有显式通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。
⑿想象一下,如果实例化instance很消耗资源,我想让它延迟加载,另外一方面,我不希望在Singleton类加载时就实例化,因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,那么这个时候实例化instance显然是不合适的。这个时候,这种方式就显得很合理。
⒀关于类加载情况下单例模式,如果单例由不同的类装载器装入,那便有可能存在多个单例类的实例。假定不是远端存取,例如一些servlet容器对每个servlet使用完全不同的类装载器,这样的话如果有两个servlet访问一个单例类,它们就都会有各自的实例。修复的办法是
⒁单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。
⒂通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
⒃单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。
⒄要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。
⒅使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法,因为让类的实例去生成另一个唯一实例毫无意义。
⒆单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
⒇因为类控制了实例化过程,所以类可以灵活更改实例化过程。
⒈虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
⒉使用单例对象(尤其在类库中定义的对象时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
⒊不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.Framework的语言,只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如C++,其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
⒋参考资料:百度百科---单例模式
⒌单例模式的好处和缺点为什么要用单例模式详细才给分
⒍单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等单例的缺点就是不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。用单例模式,就是在适用其优点的状态下使用。
⒎Android深入理解单例模式
⒏本文主要记录使用单例模式的几种形式,并分析各自的优缺点。使用单例模式可以避免重复创建对象,以此来节省开销,首先了解一下单例模式的四大原则:
⒐常用的单例模式有:饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式,我们来逐个解释这些模式的区别。
⒑数据库链接为什么要用单例模式有什么好处吗
⒒,单例只保留一个对象,可以减少系统资源开销。,提高创建速度,每次都获取已经存在的对象因此提高创建速度全局共享对象。,单例在系统中只存在一个对象实例,因此任何地方使用此对象都是一个对象避免多实例创建使用时产生的逻辑错误。例模式是一种常用的软件设计模式,它的核心结构只包含一个被称为单例的特殊类。它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。单例模式有种实现方式:懒汉式、饿汉式和双重锁的形式。
⒓懒汉式构造函数声明为private或者protect防止被外部函数实例化,内部保存一个privatestatic的类指针保存唯一的实例,实例的动作有一个public的类方法实现。二、饿汉式在GetInstance函数里定义一个静态的实例,可以保证拥有唯一的实例,在返回是需要返回其指针即可。三、双重锁在GetInstance函数里定义一个静态的实例,可以保证拥有唯一的实例,在返回是需要返回其指针即可。
⒔很高兴为您解答,请问还有什么需要可以帮到您吗?如果您觉得对您有帮助的话,请辛苦点一下赞哦!希望可以帮到您,祝您生活愉快!
⒕单例模式指的是一个类,在全局范围内(整个系统中有且只能有一个实例存在。即该类本身负责提供一种访问其唯一对象的方式,不对外提供公共的构造函数(禁用默认公共构造函数,对于该类的实例化由它自己在类的内部进行维护!
⒖最大程度的减少了对象的创建和销毁的次数,从而降低的垃圾回收的次数
⒗节约了系统资源,尤其是内存资源
⒘不能继承,不能被外部实例化
⒙类干预了外部类的使用(外部实用类不能随意实例化,而不再仅仅专注于内部的逻辑(与单一职责模式有矛盾
⒚-有频繁的实例化后又销毁的情况,适合考虑使用单例模式,如记录日志的log对象
⒛-创建对象需要消耗过多的系统资源,但又经常用到的资源,如数据库连接
单例模式有多种实现方式,要考虑到多线程下的安全性,其每种实现方式如下所示:
以上方式,如果存在多个线程同时访问getInstance()时,由于没有锁机制,会导致实例化出现两个实例的情况,因此,在多线程环境下时不安全的。
如上代码所示,在getInstance()方法上添加了同步锁。但是该方法虽然解决了线程安全的问题,但却也带来了另外的一个问题,就是每次获取对象时,都要先获取锁,并发性能很差,还需要继续优化!
该方法将方法上的锁去掉了,避免了每次调用该方法都要获取锁的操作,从而提升了并发性能,同时在方法内部使用锁,进而解决了并发的问题,从而解决了上面**并发安全+性能低效**的问题,是个不错的实现单例的方式。
该方式虽然简单也安全,但是会造成再不需要实例时,产生垃圾对象,造成资源狼粪,因此,一般不使用。
这种方式可以达到跟**双重校验锁**一样的效果,但只适用于静态域的情况,双重校验锁可在实例域需要延迟初始化时使用
这是实现单例模式的最佳方法,更加简洁,自动支持序列化,防止多次实例化,非常高效!(强烈推荐使用
问题一:什么是单例设计模式java模式之单例模式:单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。特点:,一个类只能有一个实例,自己创建这个实例,整个系统都要使用这个实例例:在下面的对象图中,有一个单例对象,而客户甲、客户乙和客户丙是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。外部资源:譬如每台计算机可以有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。一个例子:Windows回收站。在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。两种形式:,饿汉式单例类publilassSingleton{privateSingleton(){}在自己内部定义自己一个实例,是不是很奇怪?注意这是private只供内部调用privatestaticSingletoninstance=newSingleton();这里提供了一个供外部访问本class的静态方法,可以直接访问publicstaticSingletongetInstance(){returninstance;}},懒汉式单例类publilassSingleton{privatestaticSingletoninstance=null;publicstaticsynchronizedSingletongetInstance(){这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率!if(instance==null)instance=newSingleton();returninstance;}}第二中形式是lazyinitialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。...》》问题二:将一个类设计成单例设计模式,需要哪些步骤单例模式(SingletonPattern是一个比较简单的模式。定义:确保某一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。通用类图:通用代码:Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的。/***线程安全的单例模式*饿汉式单例*authorAdministrator**/publilassSingleton{privatestaticfinalSingletonsingleton=newSingleton();限制产生多个对象privateSingleton(){}通过该方法获得实例对象publicstaticSingletongetSingleton(){returnsingleton;}类中其他方法尽量是staticpublicstaticvoiddoSomething(){}}单例模式的优点:由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显了。由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决。单例模式可以避免对资源的多重占用,例如一个写文件动作,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理。单例模式的缺点:单例模式一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现。单例模式对测试是不利的。在并行开发环境中,如果单例模式没有完成,是不能进行测试的,没有接口也不能用mock的方式虚拟一个对象。单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑,而不关心它是否是单例的,是不是要单例取决于环境,单例模式把“要单例”和业务逻辑融合在一个类中。单例模式的使用场景:要求生成唯一序列号的环境;在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的;创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源;需要定义大量的静态常量和静态方法(如工具类的环境,可以采用单例模式(当然,也可以直接声明为static的方式。单例模式的注意事项:.在高并***况下,请注意单例模式的线程同步问题。/***懒汉式单例*authorAdministrator**/publilassSingleton{privatestaticSingletonsingleton=null;限制产生多个对象privateSingleton(){}......》》问题三:什么是单例模式java模式之单例模式:单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。特点:,一个类只能有一个实例,自己创建这个实例,整个系统都要使用这个实例例:在下面的对象图中,有一个单例对象,而客户甲、客户乙和客户丙是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。外部资源:譬如每台计算机可以有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。一个例子:Windows回收站。在整个视窗系统中,回哗站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。两种形式:,饿汉式单例类publilassSingleton{privateSingleton(){}在自己内部定义自己一个实例,是不是很奇怪?注意这是private只供内部调用privatestaticSingletoninstance=newSingleton();这里提供了一个供外部访问本class的静态方法,可以直接访问publicstaticSingletongetInstance(){returninstance;}},懒汉式单例类publilassSingleton{privatestaticSingletoninstance=null;publicstaticsynchronizedSingletongetInstance(){这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率!if(instance==null)instance=newSingleton();returninstance;}}第二中形式是lazyinitialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。...》》问题四:请问,Java中,单例设计模式是个什么意思,优势何在。单例模式:保证一个类在使用过程中,只有一个实例。优势就是他的作用,这个类永远只有一个实例。步骤:.将该类的构造方式私有;.在内部实例化一个该类的实例;.提供接口给外部访问。publilassSingletonDemo{privateSingletonDemo(){};.privatestaticSingletonDemomInstance=newSingletonDemo();.publicstaticSingletonDemogetInstance(){.returnmInstance;}}问题五:将一个类做成单例是什么意思单例模式(SingletonPattern是一个比较简单的模式。定义:确保某一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。问题六:单例模式的好处和缺点?为什么要用单例模式?详细才给分单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等单例的缺点就是不适用于变化的对象,如果同一弗型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。用单例模式,就是在适用其优点的状态下使用。问题七:什么是Java单例模式啊?Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。publilassSingleton{privateSingleton(){}在自己内部定义自己一个实例,是不是很奇怪?注意这是private只供内部调用privatestaticSingletoninstance=newSingleton();这里提供了一个供外部访问本class的静态方法,可以直接访问publicstaticSingletongetInstance(){returninstance;}}第二种形式:publilassSingleton{privatestaticSingletoninstance=null;publicstaticsynchronizedSingletongetInstance(){这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率!if(instance==null)instance=newSingleton();returninstance;}}其他形式:定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些这些都是Java中的基础知识,如果你想更加详细的了解相关知识,你可以到秒秒学的网站上找到相应的课程。问题八:你熟悉的设计模式有哪些?写出单例模式的实现代码一共种设计模式!引用《软件秘笈-设计模式那点事》书籍:按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。创建型模式用来处理对象的创建过程;结构型模式用来处理类或者对象的组合;行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。创建型模式用来处理对象的创建过程,主要包含以下种设计模式:?工厂方法模式(FactoryMethodPattern?抽象工厂模式(AbstractFactoryPattern?建造者模式(BuilderPattern?原型模式(PrototypePattern?单例模式(SingletonPattern结构型模式用来处理类或者对象的组合,主要包含以下种设计模式:?适配器模式(AdapterPattern?桥接模式(BridgePattern?组合模式(positePattern?装饰者模式(DecoratorPattern?外观模式(FacadePattern?享元模式(FlyweightPattern?代理模式(ProxyPattern行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下种设计模式:?责任链模式(ChainofResponsibilityPattern?命令模式(mandPattern?解释器模式(InterpreterPattern?迭代器模式(IteratorPattern?中介者模式(MediatorPattern?备忘录模式(MementoPattern?观察者模式(ObserverPattern?状态模式(StatePattern?策略模式(StrategyPattern?模板方法模式(TemplateMethodPattern?访问者模式(VisitorPattern单例模式实现:publilassSingleton{类共享实例对象privatestaticSingletonsingleton=null;私有构造方法privateSingleton(){System.out.println(--thisisSingleton!!!);}获得单例方法publicsynchronizedstaticSingletongetInstance(){判断共享对象是否为null,如何为null则new一个新对象if(singleton==null){singleton=newSingleton();}returnsingleton;}}单例模式实现:publilassSingleton{类共享实例对象实例化privates......》》问题九:种设计模式中哪些最重要总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。最常用的是:工厂模式,单例模式,建造者模式,代理模式。其实都了解一下比较好。问题十:设计模式中,属于结构型模式的有哪些设计模式主要分三个类型:创建型、结构型和行为型。其中创建型有:一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点二、AbstractFactory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。三、FactoryMethod,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到了子类。四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。行为型有:六、Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。七、Observer,观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。八、TemplateMethod,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。九、mand,命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。十、State,状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。十一、Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。十二、ChinaofResponsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系十三、Mediator,中介者模式:用一个中介对象封装一些列的对象交互。十四、Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。十五、Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。十六、Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。结构型有:十七、posite,组合模式:将对象组合成树形结构以表示部分整体的关系,posite使得用户对单个对象和组合对象的使用具有一致性。十八、Facade,外观模式:为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。十九、Proxy,代理模式:为其他对象提供一种代理以控制对这个对象的访问二十、Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。二十一、Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。二十二、Bridge,桥模式:将抽象部分与它的实现部分......》》
java中,对象实例化的单例和多例的区别和适用环境
单例模式也是一种比较常见的设计模式其实无非是三个方面的作用:、控制资源的使用,通过线程同步来控制资源的并发访问;、控制实例产生的数量,达到节约资源的目的。、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。单例模式有一下特点:、单例类只能有一个实例。、单例类必须自己创建自己的唯一实例。、单例类必须给所有其他对象提供这一实例。
使用单例模式getInstance有什么好处
优点:.在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就防止其它对象对自己的实例化,确保所有的对象都访问一个实例.单例模式具有一定的伸缩性,类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。.提供了对唯一实例的受控访问。.由于在系统内存中只存在一个对象,因此可以节约系统资源,当需要频繁创建和销毁的对象时单例模式无疑可以提高系统的性能。.允许可变数目的实例。.避免对共享资源的多重占用。缺点:.不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。.由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。.单例类的职责过重,在一定程度上违背了“单一职责原则”。.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。