什么是设计模式
设计模式( Design Pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式的目的
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
Java设计模式有哪些
基本模式有23种:
- 单例模式
- 抽象工厂模式
- 建造者模式
- 工厂模式
- 原型模式
- ……
单例模式
在开发过程中,有些对象我们只需要一个,比如配置文件、工具类、线程池、缓存、日志对象等。
如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等
单例模式分类
常用的单例模式有两种,一种叫懒汉模式,一种叫饿汉模式。
饿汉模式
步骤
1.将构造方法私有化,不允许外部直接创建对象
2.在类内部创建
类的唯一实例,使用private static
修饰
3.提供一个用于获取实例的方法,使用public static
修饰1
2
3
4
5
6
7
8
9
10
11
12
13public class Singleton
{
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton()
{
}
//2.创建类的唯一实例,使用private static修饰
private static Singleton instance=new Singleton();
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton getInstance(){
return instance;
}
}
测试1
2
3
4
5
6
7
8
9
10
11
12
13public static void main(String[] args)
{
// 饿汉模式
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2)
{
System.out.println("s1和s2是同一个实例");
} else
{
System.out.println("s1和s2不是同一个实例");
}
}
运行结果
1 | s1和s2是同一个实例 |
为什么叫饿汉模式
不管程序是否需要这个对象的实例,总是在类加载的时候就先创建好实例,理解起来就像不管一个人想不想吃东西,他都把吃的先买好存着,如同饿怕了一样。
懒汉模式
步骤
- 将构造方式私有化,不允许外边直接创建对象
- 在类内部
声明
类的唯一实例,使用private static修饰 - 提供一个用于获取实例的方法,使用public static修饰。当第一个用户来获取的时候,才创建一个实例,后面就不需要创建了。测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public 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;
}
}运行结果1
2
3
4
5
6
7
8
9
10
11public static void main(String[] args)
{
// 懒汉模式
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
if (s3 == s4) {
System.out.println("s3和s4是同一个实例");
} else {
System.out.println("S3和s4不是同一个实例");
}
}1
s3和s4是同一个实例
为什么叫懒汉模式
当程序需要这个实例的时候才去创建对象,就如同一个人懒的饿到不行了才去吃东西。区别
- 饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,
线程安全
- 懒汉模式的特点是加载类时比较快,但运行时获取对象的速度比较慢,
线程不安全
如果一个对象使用频率不高,占用内存还特别大,明显就不合适用饿汉式了。这时应该使用懒汉模式。