单例模式优缺点

优势

(1) 因为单例模式在内存中只有一个实例,减小内存开支,特别是一个对象须要频繁地建立销毁时,并且建立或销毁时性能又没法优化,单例模式就很是明显了html

(2) 因为单例模式只生成一个实例,因此,减小系统的性能开销,当一个对象产生须要比较多的资源时,如读取配置,产生其余依赖对象时,则能够经过在应用启动时直接产生一个单例对象,而后永久驻留内存的方式来解决。数据库

(3) 单例模式能够避免对资源的多重占用,例如一个写文件操做,因为只有一个实例存在内存中,避免对同一个资源文件的同时写操做安全

(4) 单例模式能够在系统设置全局的访问点,优化和共享资源访问,例如,能够设计一个单例类,负责全部数据表的映射处理。性能

缺点

(1) 单例模式没有抽象层,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径能够实现。优化

(2) 单例类的职责太重,在必定程度上违背了“单一职责原则”。spa

(3) 滥用单例将带来一些负面问题,如:为了节省资源将数据库链接池对象设计为的单例类,可能会致使共享链接池对象的程序过多而出现链接池溢出;线程

又好比:在多个线程中操做单例类的成员时,但单例中并无对该成员进行线程互斥处理。设计

 

 

https://www.cnblogs.com/restartyang/articles/7770856.htmlrest

优势: 
    1.在单例模式中,活动的单例只有一个实例,对单例类的全部实例化获得的都是相同的一个实例。这样就 防止其它对象对本身的实例化,确保全部的对象都访问一个实例 
    2.单例模式具备必定的伸缩性,类本身来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。 
    3.提供了对惟一实例的受控访问。 
    4.因为在系统内存中只存在一个对象,所以能够 节约系统资源,当 须要频繁建立和销毁的对象时单例模式无疑能够提升系统的性能。 
    5.容许可变数目的实例。 
    6.避免对共享资源的多重占用。 
缺点: 
    1.不适用于变化的对象,若是同一类型的对象老是要在不一样的用例场景发生变化,单例就会引发数据的错误,不能保存彼此的状态。 
    2.因为单利模式中没有抽象层,所以单例类的扩展有很大的困难。 
    3.单例类的职责太重,在必定程度上违背了“单一职责原则”。 
    4.滥用单例将带来一些负面问题,如为了节省资源将数据库链接池对象设计为的单例类,可能会致使共享链接池对象的程序过多而出现链接池溢出;若是实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将致使对象状态的丢失。 htm

使用注意事项:     1.使用时不能用反射模式建立单例,不然会实例化一个新的对象     2.使用懒单例模式时注意线程安全问题     3.饿单例模式和懒单例模式构造方法都是私有的,于是是不能被继承的,有些单例模式能够被继承(如登记式模式) 

相关文章
相关标签/搜索