本文共 730 字,大约阅读时间需要 2 分钟。
单例模式是比较常见的一种设计模式,目的是保证一个类只能有一个实例,而且自行实例化并向整个系统提供这个实例,避免频繁创建对象,节约内存
比如我们电脑的操作系统的回收站就是一个很好的单例模式应用,电脑上的文件、视频、音乐等被删除后都会进入到回收站中;还有计算机中的打印机也是采用单例模式设计的,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;Web页面的计数器也是用单例模式实现的,可以不用把每次刷新都记录到数据库中
加载(classLoader)机制一般遵从下面的加载顺序
如果类还没有被加载:
先执行父类的静态代码块和静态变量初始化,静态代码块和静态变量的执行顺序跟代码中出现的顺序有关。
执行子类的静态代码块和静态变量初始化。 执行父类的实例变量初始化 执行父类的构造函数 执行子类的实例变量初始化 执行子类的构造函数 同时,加载类的过程是线程私有的,别的线程无法进入。如果类已经被加载:
静态代码块和静态变量不在重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法
在程序编写上,一般将单例模式分为两种,分别是饿汉式和懒汉式,
饿汉式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
懒汉式:在类加载时不初始化,等到第一次被使用时才初始化
优点
单例类只有一个实例,节省了内存资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能;
单例模式可以在系统设置全局的访问点,优化和共享数据,例如前面说的Web应用的页面计数器就可以用单例模式实现计数值的保存。
缺点
单例模式一般没有接口,扩展的话除了修改代码基本上没有其他途径
转载地址:http://tzshn.baihongyu.com/