编程中经常遇到要使用单例模式,但是总是别人说这个地方应该使用单例模式的时候才知道哦我应该使用单例,所以一直以来对于单例模式只有个大概的了解,不知道何时用,怎么便利的使用。正好今天学习一下。
单例模式的基本思想:一个类应该有一个返回该对象引用(永远是同一个)和一个获取实例的方法(该方法必须是静态的,一般是getInstance(),当我们调用这个静态方法时,若该类持有的引用对象不为空,则直接返回该引用,若为空,则根据私有构造函数创建一个该类的实例并将其赋给类持有的引用,该类的构造函数必须是私有的,其他对象只能通过公共的静态方法获取该类实例。
单例模式的优点和缺点
优点:
1:单例模式中,该类的所有实例化得到的都是同一个实例,可以防止其他对象对自己实例化.
2:可以节约系统资源,对于那些创建和销毁比较耗资源的对象来说可以提高系统的性能
3:可以避免对共享资源的多重占用
4:可以允许可变数目的实例
缺点:
1:单例模式的负担过重,违反了“单一职责原则”
2:单例模式不容易扩展,无法继承
3:滥用单例模式会产生负面影响,如果为了节省系统资源而将数据库连接池对象设置为单例,可能会导致共享连接池对象的程序过多导致连接池溢出。
单例模式的使用场景:单实例对象只会创建一个对象,可以节省内存,加快对象访问速度,因此若对象需要被公用的场合适合使用:
1:需要频繁实例化和销毁的对象
2:创建和销毁比较耗资源且经常用到的对象
3:有状态的工具类对象
4:频繁的访问数据库或文件的对象
单例模式的经典应用如下:
1:大多数软件都有一个或多个属性文件来存储系统配置信息,这样的系统应该有一个管理这些配置文件的对象
2:网站的计数器,一般也用一个单例对象,否则难以同步
3:数据库连接池
4:线程池
5:windows的task manager任务管理器
6:windows的回收站
7:操作系统的文件系统
(懒汉式)</