美文网首页
1、单例模式

1、单例模式

作者: 王大可_12fc | 来源:发表于2018-05-20 09:09 被阅读0次

    单例模式:

    保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

    常见场景应用:Windows的任务管理器、读配置文件的类、数据库连接池

    优点:只生成一个实例,减少系统性能开销

    五种单例模式实现方式

    主要:

    饿汉式(线程安全,调用效率高,但是不能延时加载)

    懒汉式(线程安全,调用效率不高,但是可以延时加载)

    其他:

    双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题,不建议使用)

    静态内部类式(线程安全,调用效率高,可以延时加载)

    枚举单例(线程安全,调用效率高,不能延时加载)

    如何选用:当需要延时加载时:枚举式>饿汉式

      当不需要延时加载时:静态内部类式>懒汉式

    枚举方式最安全,因为不会被反射和反序列化进行破解


    反射和反序列化破解单例模式


    应对方式:在单例子中的私有构造函数中添加这句话


    使用反序列破解单例模式

    //序列化

    FileOutputStream

    fos =  new FileOutputStream(path);

    ObjectOutputStreamoos = new ObjectOutputStream();

    oos.writeObject(s1); //s1单例对象

    oos.close();

    fos.close();


    //反序列化

    ObjectInputStream

    ois = new ObjectInputStream(new FileInputStream(path));

    SingletonDemo2

    s2 = ois.readObject();

    System.out.println(s2);


    应对方法

    在单例类中加上一个方法

    private

    Object readResolve() throws ObjectStreamException(){

    return

    instance; //返回单例

    }

    相关文章

      网友评论

          本文标题:1、单例模式

          本文链接:https://www.haomeiwen.com/subject/ospzdftx.html