1.什么是单例模式
单例模式是java设计模式中的一种,是一种创建型模式,意思就是说如果某个类采用单利模式(singleton)的话,在这个类被创建之后,只会存在一个这个类的实例对象,且可以提供外部访问的全局访问点。
那么全局的对象和singleton模式有什么本质上的区别呢,大量使用全局对象会使得程序质量降低,且有些编程语言是不支持全局变量的。最重要的也是最根本的就是全局变量可以被实例化多次。
2.单例模式的特点
实现单例模式的类智能有一个实例
单例类必须自己在类的内部创建自己的唯一的实例
单例类要提供一个全局访问的访问点,供其他对象能够得到这一个实例
3.单例模式的常见应用场景
比如说windows的任务管理器就是典型的单例模式,你无法打开多个任务管理器。
再通俗点的就是网站的计数器,一般也是采用单例模式实现,否则难以同步。
4.单例模式的举例
1. 饿汉方式的单例模式
class HungrySingleton{
private static HungrySingleton singleton=new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance(){
return singleton;
}
}
|
| 特点:饿汉方式是线程安全的,但是效率相对来说比较低。 2.懒汉方式的单例模式
class LazySingleton{
private static LazySingleton singleton;
private LazySingleton(){
}
public static LazySingleton getInstance(){
if(singleton==null){
singleton=new LazySingleton();
}
return singleton;
}
}
|
| 特点:线程不安全 3.使用内部类
public class Singleton{
private static class SingletonHolder{
private static Singleton instance = new Singleton();
}
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHoder.instance;
}
} 特点:线程安全,懒加载 本人推荐使用第三种方式,适用面最广。
|