介绍
单例模式是GOF23中最简单的模式。单例的设计模式里的出场率很高,它简单但也有多种实现方式,也正是因为它的灵活性和重要性使唤其多次出现在面试笔试中,经常与工厂模式搭配使用。
作用
保证一个类只能有一个实例。多次创建只会返回同一个实例。
作用范围
- 如word中的工具箱,任何时候只能有一个工具箱。(大话设计模式)
- window的任务管理器等等
- 网站的计数器
周围的单例:spring bean的创建就是单例+工厂实现
实现步骤
- 私有化类的所有构造方法,使调用者不可直接通过new创建该类实例
- 单例类中暴露一个名为getInstance()的静态方法来为调用者返回一个实例对象
单例的五种实现
1. 饿汉式
/**
* 单例模式之饿汉式
*/
public class Singleton1 {
//私有化构造方法
private Singleton1(){};
//在类初始化时就创建类的实例
private static Singleton1 singleton = new Singleton1();
//对外暴露的方法获取单例对象
public static Singleton1 getInstance(){
return singleton;
}
}
优点:获取实例效率高
缺点:如果存在初始化类后并没有获取使用单例对象这种情况就会造成内存的浪费。