设计模式(单列模式)
1.1什么是设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的:为了可重用代码、让代码更容易被他人理解、保证代码可靠性。就如我们现实生活中(打仗使用战争的战阵、三六计,公司的结构模式、管理模式)。
1.2 什么是单例模式
单例模式,我们可以从字面的意思理解,就是只有一个实例存在的意思。就像现在国家的主席(总统),以及合法的老婆,这些只会存在一个。那么在java的世界里面,那些东西或者场景要求对象必须为单例呢?比如配置文件,工具类,线程池,日志,数据库连接等等,在实际开发中都要求是只有一个实例存在的,这时候我们就会用到单例模式。单例模式有两种饿汉模式和懒汉模式。
单例模式的特点:
(1)有且只有一个实例存在
(2)构造方法私有化,只能自己创建唯一的实例
(3)以自己实例为返回值的静态的公有的方法给外部进行调用
1.3什么是饿汉模式
编程世界里的好多名词概念都是来自现实生活,非常形象生动。所以我们有可以从字面的意思理解,就是处于饥饿状态的流浪汉,专业一点就是在类加载的时候就创建类的唯一的一个实例,不会等到你去调用的时候再去创建类的实例。代码如下:
[java] view plaincopy
packagecom.pattern.singleton;
/**
* 单例模式之饿汉模式(在类加载的时候就创建了类的实例)
* 应用场景:配置文件的读取,工具类,线程池,日志,数据库连接
* 作用:保证有且只有一个实例存在
* @author wz
*
*/
public class EagerSingleton {
//1.创建一个类的实例,并且定义为private static 的类
private static EagerSingleton singleton = new EagerSingleton();
//2.构造方法私有化,防止外部调用直接new一个实例
private EagerSingleton(){
}
//3.以自己实例为返回值的静态的公有的方法给外部进行调用
public static EagerSingleton getInstance(){
return singleton;
}
}
1.4什么是懒汉模式
懒汉模式就是等到你去调用的时候再去创建类的实例,并且只会在第一次进行创建类的实例。代码如下:
[java] view plaincopy
packagecom.pattern.singleton;
/**
* 单例模式之懒汉模式(在调用类第一次时候创建类的实例)
* 应用场景:配置文件的读取,工具类,线程池,日志,数据库连接
* 作用:保证有且只有一个实例存在
* @author wz
*
*/
public class LazySingleton {
//1.声明一个类的实例,并且定义为private static
private static LazySingleton lazySingleton = null;
//2.构造方法私有化,防止外部调用直接new一个实例
private LazySingleton (){
}
//3.以自己实例为返回值的静态的公有的方法给外部进行调用
public static LazySingleton getInstance(){
if(lazySingleton == null){
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
1.5 “饿汉模式” VS “懒汉模式”
主要区别如下:
(1) 饿汉模式在加载类的时候比较慢,但运行时获取对象的速度比较快;懒汉模式在加载类的时候比较快,但运行时获取对象的速度比较慢;
(2) 饿汉模式是线程安全的,懒汉模式是非线程安全的。一般推荐使用饿汉模式。