当前位置:   article > 正文

Java设计模式——单例模式_java设计模式之单例模式

java设计模式之单例模式

单例模式有三个特点:

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

单例模式的用处:

  • 防止资源被多个请求同时调用(如打印机、通信端口等)
  • 存放配置信息,避免状态不一致

五种实现单例模式的方法:

1、饿汉式(先创建出实例):

class Singleton{
    //静态实例
    private static Singleton singleton = new Singleton();

    //构造函数
    private Singleton(){};

    public Singleton getInstance(){
        return singleton;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、懒汉式(需要时才创建实例):

class Singleton{
    private static Singleton singleton = null;

    public static synchronized Singleton getInstance(){
        if(null == singleton){
            singleton = new Singleton();
        }
        return singleton;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、枚举

enum Singleton{
    INSTANCE;  //枚举成员

    private Singleton singleton;

    private Singleton{
        singleton = new Singleton();
    }

    public Singleton getInstance(){
        return singleton;
    }
}

//获得实例:Singleton.INSTANCE.getInstance();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4、静态内部类:

class Singleton{
    //静态内部类
    private static calss SingletonHolder{
        private static final Singleton singleton = new Singleton();
    }

    //构造函数
    private Singleton(){};

    public static final Singleton getInstance(){
        return SingletonHolder.singleton;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

5、静态代码块

class Singleton{
    //静态变量
    private static Singleton singleton = null;

    //构造函数
    private Singleton(){};

    //静态代码块
    static{
        singleton = new Singleton();
    }

    public Singleton getInstance(){
        return singleton;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/729605
推荐阅读
相关标签
  

闽ICP备14008679号