单例模式优缺点
优点
(1) 由于单例模式在内存中只有⼀个实例,减少内存开⽀,特别是⼀个对象需要频繁地创建销毁时,⽽且创建或销毁时性能⼜⽆法优化,单
例模式就⾮常明显了
(2) 由于单例模式只⽣成⼀个实例,所以,减少系统的性能开销,当⼀个对象产⽣需要⽐较多的资源时,如读取配置,产⽣其他依赖对象
时,则可以通过在应⽤启动时直接产⽣⼀个单例对象,然后永久驻留内存的⽅式来解决。
(3) 单例模式可以避免对资源的多重占⽤,例如⼀个写⽂件操作,由于只有⼀个实例存在内存中,避免对同⼀个资源⽂件的同时写操作
(4) 单例模式可以在系统设置全局的访问点,优化和共享资源访问,例如,可以设计⼀个单例类,负责所有数据表的映射处理。
缺点
单例模式的几种实现方式
(1) 单例模式没有抽象层,扩展很困难,若要扩展,除了修改代码基本上没有第⼆种途径可以实现。
(2) 单例类的职责过重,在⼀定程度上违背了“单⼀职责原则”。
(3) 滥⽤单例将带来⼀些负⾯问题,如:为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多⽽出
现连接池溢出;
⼜⽐如:在多个线程中操作单例类的成员时,但单例中并没有对该成员进⾏线程互斥处理。
wwwblogs/restartyang/articles/7770856.html
优点:
1.在单例模式中,活动的单例只有⼀个实例,对单例类的所有实例化得到的都是相同的⼀个实例。这样就防⽌其它对象对⾃⼰的实例化,确保所有的对象都访问⼀个实例
2.单例模式具有⼀定的伸缩性,类⾃⼰来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
3.提供了对唯⼀实例的受控访问。
4.由于在系统内存中只存在⼀个对象,因此可以节约系统资源,当需要频繁创建和销毁的对象时单例模式⽆疑可以提⾼系统的性能。
5.允许可变数⽬的实例。
6.避免对共享资源的多重占⽤。
缺点:
1.不适⽤于变化的对象,如果同⼀类型的对象总是要在不同的⽤例场景发⽣变化,单例就会引起数据的错误,不能保存彼此的状态。
2.由于单利模式中没有抽象层,因此单例类的扩展有很⼤的困难。
3.单例类的职责过重,在⼀定程度上违背了“单⼀职责原则”。
4.滥⽤单例将带来⼀些负⾯问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多⽽出现连接池溢出;如果实例化的对象长时间不被利⽤,系统会认为是垃圾⽽被回收,这将导致对象状态的丢失。
使⽤注意事项:
1.使⽤时不能⽤反射模式创建单例,否则会实例化⼀个新的对象
2.使⽤懒单例模式时注意线程安全问题
3.饿单例模式和懒单例模式构造⽅法都是私有的,因⽽是不能被继承的,有些单例模式可以被继承(如登记式模式)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论