设计模式--单例模式篇
2018-01-24 本文已影响29人
雨果是程序员
1.介绍
单例模式:是一种常用的软件设计模式,中心思想:一个类保证只有一个实例。
2.使用场景
有些对象我们只需要一个,如果一个全局使用的类频繁地创建与销毁,这样会造成很多io的消耗。例如我们在实际项目中:对于配置文件、工具类、线程池、缓存、日志对象等。这些对象,我们都是需要保证其实例只有一个,所以需要单例模式的构建。
学习过Spring的同学,应该都知道在Spring中Bean的scope(作用范围)参数的缺省设定值就是单例模式。每个bean定义只生成一个对象实例,每次getBean请求获得的都是这个唯一实例。
3.Java代码实现
a.单例模式--饿汉模式的创建
/**
* 单例模式singleton
* 饿汉模式EagerSingleton
* 特点:加载类时比较慢,但是运行时获取对象的速度比较快,线程安全。
*/
public class EagerSingleton {
//1.将构造方法私有化,外界无法直接创建多个实例
private EagerSingleton() {
}
//2.创建类的唯一实例,使用private static修饰,外界不能直接访问
private static EagerSingleton instance = new EagerSingleton();
//3.提供一个用于获取唯一实例的方法,使用public static修饰
public static EagerSingleton getInstance() {
return instance;
}
}
b.单例模式--懒汉模式的创建
package com.hugo.designpattern;
/**
* 单例模式singleton
* 懒汉模式LazySingleton
* 特点:加载类时比较快,但是运行时获取对象的速度比较慢,线程不安全。
*/
public class LazySingleton {
//1.将构造方法私有化,外界无法直接创建多个实例
private LazySingleton() {
}
//2.创建类的唯一实例,使用private static修饰,外界不能直接访问
private static LazySingleton instance;
//3.提供一个用于获取唯一实例的方法,使用public static修饰
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
c.饿汉模式和懒汉模式的区别
因为饿汉模式在加载类时,就直接new一个唯一实例,所以加载时,速度会比较慢;另一方面,正是由于类加载时就创建了这个唯一实例,所以运行时,获取对象实例,速度会比较快。线程安全。
因为懒汉模式在加载类时,并没有直接new一个唯一实例,所以速度会比较快;另一方面,运行时,获取对象实例,对象存在就直接返回,不存在就new一个唯一实例,速度会比较慢。线程不安全。