星期五, 三月 6日 2020, 1:53 下午

  584 字     2 分钟       

单例模式

介绍

每个类只能创建一个实例对象。Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

优点

  • 1 控制资源的使用,通过线程同步来控制资源的并发访问;
  • 2 控制实例产生的数量,达到节约资源的目的。
  • 3 作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。

种类

饿汉-单例式 懒汉-单例式 静态内部类

1.饿汉-单例式

效率高,线程安全,但浪费内存;不管对象是否真的用到,都直接创建完成

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Singleton1 {
//1.定义私有静态变量,类型为类类型
//直接创建好对象,不论到底会用到用不到,故称为饿汉式
private static Singleton1 instance = new Singleton1();
//2.定义私有构造函数
private Singleton1(){

}
//3.定义公共静态方法,返回私有静态变量
public static Singleton1 getInstance(){
return instance;
}
}

2.懒汉-单例式

效率低,线程不安全,需要通过synchronize来保证线程安全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Singleton2 {
//1.定义私有静态变量,类型为类类型,
// 先不创建,等用到时再创建(正是由于等用到时才创建,故而才称为懒汉式)
private static Singleton2 instance = null;
//2.定义私有构造函数
private Singleton2(){

}
//3.定义公共静态方法,返回私有静态变量
//public static Singleton2 getInstance(){//线程不安全的
public static synchronized Singleton2 getInstance(){// 线程安全,通过synchronize保证线程安全
if(instance == null){
instance = new Singleton2();
}
return instance;
}
}

3.静态内部类

效率高,线程安全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Singleton3 {
//1.定义静态内部类,类里面有静态内部属性,为类类型
private static class SingletonInnerClass{
private static final Singleton3 instance = new Singleton3();
}
//2.定义私有构造函数
private Singleton3(){

}
//3.定义公共静态方法,返回内部类的静态常量
public static Singleton3 getInstance(){
return SingletonInnerClass.instance;
}
}

 
 
 
 
 
 

 
下一节开始学习工厂模式。。。。



java      java 设计模式

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

 目录