[TOC]
单例模式
什么是单例模式?
单例模式是指确保一个类只有一个实例,提供一个全局访问点,不需要实例化这个类,直接调用其方法即可
1、具体步骤是
1、将类的构造函数生命为私有的构造函数,在外部就不能通过Test a= new Test()
来实例化,用Private
字段限制只能在内部可以实例,外部不能访问。
2、在类的里面声明一个用static
修饰的公开的全局静态字段(这里就是提供给外部的唯一访问点),外部可以通过这个访问点,拿到该类的实例,static
表示是静态变量,会长期占用内存,别人能够直接拿到实例
2、什么时候需要使用单例模式:
虽然使用单例模式是直接调用该类,但会长期占用内存,不会被销毁,这既是优点也是缺点,切不可为图方便就大量的使用单例
1、在系统中有不可变的参数,或者需要记录保持叠加的参数
2、为避免重复或者冲突的业务场景,需要使用单线程工作完成的场景就需要适当使用单例模式,比如:打印机业务,或者 windows 操作系统中的打开文件和桌面右键刷新都是单例模式的使用场景
3、单例模式的两种方式
懒加载方式: 指的是只有在有调用这个唯一访问点的时候才去实例化该类,当有多人调用的时候,也只有第一次调用的时候会实例化,全局只实例化一次。
饿汉模式加载方式: 指的是系统初始化的时候就已经实例化好了类,外部调不调用都在那里。
总结:
- 在合适的场景使用单例模式,不要无节制的使用,会导致内存占用过多,甚至内存泄露等,也就是:尽量避免静态成员的使用,因为静态成员所在的实例,不会被 GC 回收
- 优先选择静态方法调用而不是单例模式调用
- 在单例模式中尽量使用懒加载的方式,而不是饿汉加载的方式,减少程序启动成本。
1 | /// 定义一个私有类 |
本文参考了博客园的文章,侵权联系删除 查看原文