学习 单例模式 笔记
单例模式:
模式主要作用: 保证在Java应用程序中,一个类Class只有一个实例存在
比如: 建立目录 数据库连接 都需要这样的单线程操作
一些大的应用程序中,主程序只需要有一个,因此需要使用单例模式
我们常常看到 工厂模式 中类装入器(class loader)中也用Singleton模式实现的,
因为被装入的类实际也属于资源
优点:
1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
= 节省内存 有利于Java垃圾回收
缺点:
1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。
这个问题可以通过静态实例来解决。
2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),
开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,
所以当他们发现不能实例化一个类的时候会很惊讶。
3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言
(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,
因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,
但是这么做将导致单例类内部的指针指向不明。
--------------------------------
总结:
单例模式 看起来简单,使用方法也很方便,但是真正用好,是非常不容易,
需要对Java的类,线程,内存等概念有相当的了解
/**
第一种单例模式 写法:
一般认为第一种形式要更加安全些
*/
public class SingleModel{
private static SingleModel instance = new SingleModel();
public static SingleModel getInstance(){
return instance;
}
}
/**第二种单例模式 写法*/
public class SingleModel{
private static SingleModel instance = null;
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new SingleModel();
}
return instance;
}
}