设计模式-创建型模式之单例模式

2019-02-14  本文已影响0人  gooddaytoyou

定义

单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。

单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。

解决问题

解决实例化对象的个数的问题,比如抽象工厂中的工厂、对象池等,除了Singleton之外,其他创建型模式解决的都是 new 所带来的耦合关系。

UML类图

singleton.png

例子

创建型模式-单例模式-饿汉式

package java.creativepatterns;

/**
* @author Armyone
* @date 2019/2/13 17:15
* @desc 创建型模式-单例模式-饿汉式
*/

public class SingletonPatternHungry {
  private static SingletonPatternHungry instance = new SingletonPatternHungry();

  private SingletonPatternHungry() {
  }

  public static SingletonPatternHungry getInstance() {
      return instance;
  }
}

创建型模式-单例模式-懒汉式-线程安全

package java.creativepatterns;

/**
 * @author Armyone
 * @date 2019/2/13 16:38
 * @desc 创建型模式-单例模式-懒汉式
 */

public class SingletonPatternLazy {
    private static SingletonPatternLazy instance;

    private SingletonPatternLazy() {
    }

    public static synchronized SingletonPatternLazy getInstance() {
        if (instance == null) {
            instance = new SingletonPatternLazy();
        }
        return instance;
    }
}

创建型模式-单例模式-双层锁定

package java.creativepatterns;

/**
 * @author Armyone
 * @date 2019/2/13 16:38
 * @desc 创建型模式-单例模式-双层锁定
 */

public class SingletonPatternDoubleCheck {
    private static volatile SingletonPatternDoubleCheck instance;

    private SingletonPatternDoubleCheck() {
    }

    public static synchronized SingletonPatternDoubleCheck getInstance() {
        if (instance == null) {
            synchronized (SingletonPatternDoubleCheck.class) {
                instance = new SingletonPatternDoubleCheck();
            }
        }
        return instance;
    }
}

创建型模式-单例模式-静态内部类

package java.creativepatterns;

/**
 * @author Armyone
 * @date 2019/2/13 17:37
 * @desc 创建型模式-单例模式-静态内部类
 */

public class SingletonPatternStaticMethod {
    private SingletonPatternStaticMethod() {
    }

    private static class SingletonPatternStaticMethodHoler {
        private static SingletonPatternStaticMethod instance = new SingletonPatternStaticMethod();
    }

    public static SingletonPatternStaticMethod getInstance() {
        return SingletonPatternStaticMethodHoler.instance;
    }
}

优缺点

优点:

缺点:

延伸

上一篇下一篇

猜你喜欢

热点阅读