创造型模式-单例模式
介绍
保证一个类仅有一个实例,并提供一个访问它的全局访问点
实例
- 创建
Singleton
类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class SingleObject {
//创建 SingleObject 的一个对象
private static SingleObject instance = new SingleObject();
//让构造函数为 private,这样该类就不会被实例化
private SingleObject(){}
//获取唯一可用的对象
public static SingleObject getInstance(){
return instance;
}
public void showMessage(){
System.out.println("Hello World!");
}
}
从
singleton
类获取唯一的对象1
2
3
4
5
6
7
8
9
10
11
12
13
14public class SingletonPatternDemo {
public static void main(String[] args) {
//不合法的构造函数
//编译时错误:构造函数 SingleObject() 是不可见的
//SingleObject object = new SingleObject();
//获取唯一可用的对象
SingleObject object = SingleObject.getInstance();
//显示消息
object.showMessage();
}
}输出结果
1
Hello World!
懒汉式(线程不安全)
1 | public class Singleton { |
懒汉式(线程安全)
1 | public class Singleton { |
饿汉式
1 | public class Singleton { |
双重检验锁
1 | public class Singleton { |
静态内部类
1 | public class Singleton { |
枚举
1 | public enum Singleton { |
总结
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
不建议使用懒汉式,建议使用饿汉式