美文网首页
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 单例模式2

  • 设计模式-单例模式

    1、普通单例模式 2、惰性单例模式

  • 前端开发工程师必备系列-几个简单的JS单例模式

    前端开发工程师必备系列-几个简单的JS单例模式 JavaScript单例模式 1. 单例模式 单例模式(Singl...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例模式和GCD单例实现

    1、传统单例模式2、GCD单例模式3、用宏实现GCD单例模式4、用宏实现GCD单例模式,名称随类名变化而变化 单例...

  • 设计模式之一:单例模式

    摘要:设计模式之一:单例模式目录介绍1.单例模式介绍2.单例模式定义3.单例模式使用场景4.单例模式的实现方式 4...

  • iOS开发中ARC环境下单例模式

    单例模式 1.1 概念相关 (1)单例模式 **(2)使用场合 ** 1.2 ARC实现单例 **(1)步骤 **...

  • 单例模式

    单例模式--概念 单例模式常见的写法有:懒汉式,饿汉式,登记式。单例模式的特点有:1.单例类只能有1个实例2.单例...

  • java基础-day29-单例模式和NIO

    单例模式和NIO 1. 单例模式 1.1 要求 1.2 单例模式推导【懒汉】 1.3 另一种单例模式【饿汉】 2....

  • 单例模式

    目录 1、设计模式简介 2、什么是单例模式 3、单例模式应用场合 4、单例模式作用 5、单例模式3个要点/要素 6...

网友评论

      本文标题:1、单例模式

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