设计模式1-单例模式

设计模式(Design Pattern)

是一套被反复使用、多数人知晓、

经过分类编目的、代码设计经验的总结。

目的:

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

有些东西只能有一个,比如古代的皇帝,现在的一夫一妻制。

在java中有些对象我们只需要一个,比如:

配置文件、工具类、线程池、缓存、日志对象等


如果创造出多个实例,就会导致许多问题,比如占用过多的资源,不一致的结果。


常用的单例模式:

饿汉模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package cn.zju.singleton;
/**
* 饿汉:在类加载的时候就实例化,需要早些吃饱。
*
* @author zhushiqing
*
*/
public class Singleton {
//1、将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//2、创建类的唯一实例,private static 修饰
private static Singleton instance = new Singleton();
//3、提供获取类实例的方法
public static Singleton getInstance(){
return instance;
}
}

懒汉模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package cn.zju.singleton;
/**
* 懒汉模式 线程不安全
* @author zhushiqing
*
*/
public class Singleton2 {
//1、将构造方法私有化,不允许外部实例化
private Singleton2(){}
//2、声明类的唯一实例,使用private static修饰
private static Singleton2 instance;
//3、提供一个用户获取实例的方法,使用public static修饰
public static synchronized Singleton2 getInstance(){
if(instance == null)
instance = new Singleton2();
return instance;
}
}

两者区别:

饿汉模式:加载类的加载比较慢,但是运行时获取对象速度比较快,在类加载的时候就被创建 线程安全的
懒汉模式:加载类的时候比较快,但是运行时获取对象比较慢。 线程不安全的