单例模式()
单例模式是设计模式中使用最为普遍的模式之一它是一种对象创建模式用于产生一个对象的具体实例它可以确保系统中一个类只产生一个实例在Java语言中这样的行为能带来两大好处
()对于频繁使用的对象可以省略创建对象所花费的时间这对于那些重量级对象而言是非常可观的一笔系统开销
()由于new操作的次数减少因而对系统内存的使用频率也会降低这将减轻GC压力缩短GC停顿时间
因此对于系统的关键组件和被频繁使用的对象使用单例模式便可以有效地改善系统的性能
单例模式的参与者非常简单只有单例类和使用者两个如表所示
表 单例模式角色
它的基本结构如图所示
图 单例模式类图
单例模式的核心在于通过一个接口返回唯一的对象实例一个简单的单例实现如下
public class Singleton {
private Singleton(){
Systemoutprintln(Singleton is create) //创建单例的过程可能会比较慢
}
private static Singleton instance = new Singleton()
public static Singleton getInstance() {
return instance;
}
}
注意代码中的重点标注部分首先单例类必须要有一个private访问级别的构造函数只有这样才能确保单例不会在系统中的其他代码内被实例化这点是相当重要的其次instance成员变量和getInstance()方法必须是static的
注意单例模式是非常常用的一种结构几乎所有的系统中都可以找到它的身影因此希望读者可以通过本节了解单例模式的几种实现方式及其各自的特点
这种单例的实现方式非常简单而且十分可靠它唯一的不足仅是无法对instance实例做延迟加载假如单例的创建过程很慢而由于instance成员变量是static定义的因此在JVM加载单例类时单例对象就会被建立如果此时这个单例类在系统中还扮演其他角色那么在任何使用这个单例类的地方都会初始化这个单例变量而不管是否会被用到比如单例类作为String工厂用于创建一些字符串(该类既用于创建单例Singleton又用于创建String对象)
public class Singleton {
private Singleton() {
Systemoutprintln(Singleton is create)
//创建单例的过程可能会比较慢
}
private static Singleton instance = new Singleton()
public static Singleton getInstance() {
return instance;
}
public static void createString(){ //这是模拟单例类扮演其他角色
Systemoutprintln(createString in Singleton)
}
}
返回目录Java程序性能优化让你的Java程序更快更稳定
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
JME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南