设计

1.单例类只能有一个实例。
2.单例类必须自己创建自己的唯一实例。
3.单例类必须给所有其他对象提供这一实例。

意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实现方式

双检锁/双重校验锁

  1. public class SingleObject {
  2. //创建 SingleObject 的一个对象
  3. private volatile static SingleObject instance;
  4. //让构造函数为 private,这样该类就不会被实例化
  5. private SingleObject(){}
  6. //获取唯一可用的对象
  7. public static SingleObject getInstance(){
  8. if (instance == null) {
  9. synchronized (SingleObject.class) {
  10. if (instance == null) {
  11. instance = new SingleObject();
  12. }
  13. }
  14. }
  15. return instance;
  16. }
  17. public void showMessage(){
  18. System.out.println("Hello World!");
  19. }
  20. }
  1. public class SingletonPatternDemo {
  2. public static void main(String[] args) {
  3. //不合法的构造函数
  4. //编译时错误:构造函数 SingleObject() 是不可见的
  5. //SingleObject object = new SingleObject();
  6. //获取唯一可用的对象
  7. SingleObject object = SingleObject.getInstance();
  8. //显示消息
  9. object.showMessage();
  10. }
  11. }