设计原则&模式:单例模式(创建型)

定义:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。

五种实现方式:

  • 饿汉式
  • 懒汉式
  • 双重校验
  • 静态内部类
  • 枚举类

 

 

饿汉式

特点:线程安全,调用效率高,但是不能延时加载

public class SingletonDemo01{
    private static SingletonDemo1 instance = new SingletonDemo1();
    private SingletonDemo1(){}
    public static SingletonDemo1 getInstance(){
        return instance;
    }
}

 

 

 

 

懒汉式

特点:线程安全,调用效率不高,但是能延时加载

public class SingletonDemo2{
    //类初始化时,不初始化这个对象(延时加载,真正用的时候再加载)
    private static SingletonDemo2 instance;
    //构造器私有化
    private SingletonDemo2(){}
    //方法同步,调用效率低
    public static synchronized SingletonDemo2 getInstance(){
        if(instance == null){
            instance = new SingletonDemo2();
        }
        return instance;
    }
}

 

 

 

双重校验 

public class SingletonDemo3{
    private volatile static SingletonDemo3 singletonDemo3;
    private SingletonDemo3(){
    }
    public static SingletonDemo3 newInstance(){
        if(singletonDemo3 == null){
            synchronized (SingletonDemo3.class){
                if(singletonDemo3 == null){
                    singletonDemo3 = new SingletonDemo3();
                }
            }
        }
        return singletonDemo3;
    }
}

 

 

静态内部类

特点:线程安全,调用效率高,可以延时加载

public class SingletonDemo4{
    /* 静态内部类 */
    private static class SingletonClassInstance{
        private static final SingletonDemo4 instance = new SingletonDemo4();
    }
    private SingletonDemo4(){}
    public static SingletonDemo4 getInstance(){return SingletonClassInstance.instance;}
}

 

枚举类

public enum SingletonDemo5{
    // 枚举元素本身就是单例
    INSTANCE;
    
    // 添加自己需要的操作,直接通过SingletonDemo5.INSTANCE.doSomething()的方式调用即可。
    public void doSomething(){System.out.println("doSomething");}
}

class Test{
    public static void main(String[] args){SingletonDemo5.INSTANCE.doSomething();}
}

 

 

END

posted @ 2024-02-28 18:18  HOUHUILIN  阅读(2)  评论(0编辑  收藏  举报