目录
java设计模式
单例模式--懒汉式
单例模式--饿汉式
单例模式--DCL
单例模式--枚举
java设计模式
单例模式--懒汉式
package me.maiz.se.mini.deignpattern;
/** * 懒汉式单例,需要时创建单例(线程不安全版本) */
public class SingletonLazy{
private static SingletonLazy instance ;
private SingletonLazy(){}
public static SingletonLazy getInstance() {
if(instance==null){
instance=new SingletonLazy();
}
return instance;
}}
单例模式--饿汉式
package me.maiz.se.mini.deignpattern;
/** * 饿汉式单例,创建类时创建单例,线程也不安全 */
public class SingletonHungary {
private static final SingletonHungary instance = new SingletonHungary();
private SingletonHungary(){}
public static SingletonHungary getInstance() {
return instance;
}}
单例模式--DCL
package me.maiz.se.mini.deignpattern;
/** * 懒汉式单例,需要时创建单例(线程安全版本,使用了双重检查锁DCL机制) */
public class SingletonDoubleChecking {
private static SingletonDoubleChecking instance ;
private SingletonDoubleChecking(){}
public static SingletonDoubleChecking getInstance() {
//检查是否为空,不为空时不检查,节省性能消耗;为空时可能有并发问题
if(instance==null){ //同步代码块,保证不会被并发获取 synchronized(SingletonDoubleChecking.class) {
//进入时再次判断,若不为空则不建实例,保证单例
if (instance==null) {
instance = new SingletonDoubleChecking();
}
}
}
return instance; }
}
单例模式--枚举
package me.maiz.se.mini.deignpattern;
/** * 枚举式单例,枚举的创建由JVM保证,因此不会出现并发问题,构造器自动私有,外部不能创建,只能引用 * 用法为:SingletonEnum.INSTANCE.doSomething(); */
public enum SingletonEnum {
//唯一实例,默认为public static final的 INSTANCE;
public String name;
public void doSomething(){
System.out.println("doSomething"); }
public static void main(String[] args) {
SingletonEnum.INSTANCE.doSomething();
}
}