Java设计模式——单例

2018-12-10 16:41:40  卢浮宫  版权声明:本文为站长原创文章,转载请写明出处


一、前言

    在Java中有23种设计模式,单例模式是其中的一种。单例模式的写法主要有:懒汉式、饿汉式、静态内部类、枚举。


二、 单例模式有以下特点:

    ①单例类只能有一个实例。

    ②单例类必须自己创建自己的唯一实例。③单例类必须给所有其他对象提供这一实例。


三、实现方式如下:

    1、懒汉模式

     public class SingletonDemo {
private static SingletonDemo instance;
private SingletonDemo(){
}
public static SingletonDemo getInstance(){
if(instance==null){
instance=new SingletonDemo();
}
return instance;
}
}


        ①这里使用了静态对象instance和私有构造方法SingletonDemo,通过getInstance方法来提供单例进行访问。

        ②缺点如下:没有考虑到线程安全,当多个访问者同时访问,就需要同时构造多个对象。同时懒汉模式,有着非常明显的懒加载。


    2、饿汉模式(建议使用)   

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


        这种模式直接在运行这个类的时候进行一次加载,之后直接访问。没有懒加载的效果。和下面静态类的对比,多了一个内存常驻。


    3、静态内部类加载(建议使用)

    public class SingletonDemo {
private static class SingletonHolder{
private static SingletonDemo instance=new SingletonDemo();
}
private SingletonDemo(){
System.out.println("Singleton has loaded");
}
public static SingletonDemo getInstance(){
return SingletonHolder.instance;
}
}

        使用内部类的好处是:静态内部类不会在单例加载时就加载,而是在调用getInstance()方法时才进行加载,达到了类似懒汉模式的效果,同时也是线程安全的。


    4、枚举方式(建议使用)

    enum SingletonDemo{
INSTANCE;
public void otherMethods(){
System.out.println("Something");
}
}


    这种方式优点有:①自由序列化。②只有一个实例。③线程安全。


四、后记

    以上就是Java设计模式--单例的全部内容,持续更新中欢迎订阅关注。

    纯手打,如有不当之处敬请斧正。也希望在对大家产生作用的同时多多关注交流!




更多精彩请关注guangmuhua.com


最新评论: