java的23种设计模式 第2章

本文探讨了单例模式在遇到反射攻击时的安全性问题,介绍了通过同步锁和使用枚举防止反射破坏的方法。还提到通过设置有参构造函数来避免反射异常,并预告了下文将讨论抽象工厂模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一个节点 主要介绍了  设计模式 中其中一种  单例模式 (懒汉模式和饿汉模式)等一些方法的操作  包括面向对象oop的规则 等

这节还是介绍单例模式的其他操作

内部类创建使用单例模式

因为反射的存在 像这种单例模式都是不安全的

大概演示一下反射机制

 通过此段代码我们可以发现创建空参构造方法以后  然后设置访问权限 将私有化权限设置取消 并且将我们的对象 获取到空参构造器内 发现对象的数据集 地址是不一样的 这样我们的单例就被反射给破坏了

这种方法也好解决 还是根据之前懒汉模式一样 设置synchronized 锁对类方法 进行判断 抛出异常这样就不会产生 反射破坏单例模式的异常问题 这里我自定义一个boolean值做判断

 

这样在运行的时候就会抛出这个反射的异常  其实解决这样并不能完全解决我们的反射异常 当我们修改权限 将私有化权限设置的时候 

 

反射仍然可以破坏单例  在源码中

 

 已经告诉我们通过创建枚举的形式来不能通过反射来破坏枚举

 

 创建枚举类 测试反射能不能破坏单例

打印的结果 很无奈  是表示没有这个无参构造  解决方法就是在 创建空参构造的时候设置 参数为有参构造 

 这个是从源码里查到的 设置string 和int类参数 打印以后就会正常阻止反射破坏单例 异常报错 ;

下一节 23种设计模式的 抽象工厂模式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值