1.什么是单例模式?
这里援引百度百科对单例模式的定义:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例.
说简单点就是运行系统中的每个对象最多只能有一个对应的实例.
2.为什么要使用单例模式?
主要是为了节省系统资源和确保系统中运行实例状态的唯一性,试想如果每个对象都拥有多个重复的实例的话,不仅仅会浪费内存空间,还会因为多个对象所处的状态不同而陷入混乱,到底用哪一个实例???
3.如何实现?
单例模式的实现主要有两种方式,一种是饿汉式,一种是懒汉式,在实际开发中,前者用的更多一点,因为前者是线程安全的.
3.1饿汉式
/**
* 设计模式-单例-饿汉式
*/
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
3.2懒汉式
/**
* 设计模式-单例-懒汉式
*/
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if (instance == null){ //此处线程不安全,多线程下可能会被创建出多个实例
instance = new Singleton();
}
return instance;
}
}
4.总结
饿汉式实现相对比较简单,线程安全,缺点主要是在类加载时就被加载进内存,浪费内存空间.懒汉式线程不安全,虽然可以在方法上加synchronized锁来解决线程不安全问题,但会因为加锁而降低性能,故不推荐使用,推荐饿汉式.