如何解决用REFLECTION打破SINGLETON模式的论点是否可行?
我了解了通过枚举实现的SINGLETON,因此,它还保留了针对反射的单例性质。
是否存在实际的行业/实时场景,这种情况可能会发生?
我的理解不是。
当所有代码都放在我身边时,为什么我的代码中的任何单例类都会发生这种事情。
相反,这样的代码实践对那些有权访问代码存储库的人来说是可见的,因此它不会遗漏!
想了解一下,如果我错过了一些可以实际发生的观点!
解决方法
如果您询问是否有可能 以其他方式实现单例,则可以:
- 您可以使用反射来访问私有字段
- 您可以使用反射来更新最终字段。
实用吗?好吧,这取决于您的实际含义。
在实践中会发生吗?是的。
我们无法列举某人可能需要(或选择)做这种事情的原因。但是,假设您有一些紧迫的理由来更改单例的值,并且您丢失了所有源代码。 (是的,它发生了!)或者假设您一开始就没有源代码。
当所有代码都放在我身边时,为什么我的代码中的任何单例类都会发生这种事情。
如果您拥有源代码,并且拥有更改和重新编译源代码的自由,那么使用反射破坏单例将是一个坏主意。如果有必要(出于实用的原因)打破单例的不变式,那么最好修改API ,这样可以清楚地知道您在做什么以及为什么。
相反,这样的代码实践对那些有权访问代码存储库的人来说是可见的,因此它不会遗漏!
仅仅因为有人可以访问并不意味着他们会费心看。仅仅因为他们看起来并不意味着他们就会看到。 (有一些方法可以隐藏在应用程序代码库中可疑的代码。)
无论如何,关键是这种事情对于单例模式的某些版本(而不是其他版本)是可能的,并且如果情况允许或要求,可能发生的任何事情。 / p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。