低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

Google 单实例模式检测工具

2007 年 8 月 13 日

Google发布了一个单实例模式检测工具,通过执行字节代码检查以定位和报告字节代码中存在的单实例对象。尽管单实例模式是一种常用的软件模式,但许多人对其存有争议,需要小心地使用:这些争论可以分为支持反对两个方面。如一个项目的 wiki 上所写:

单实例模式的问题在于,它的状态对于程序来讲是全局性的,允许任何人随时存取而忽略了范围。更糟糕的是,单实例模式是现今被过分使用的一种设计模式,许多人在完全不必要的情况下就在实例中使用了这种可能带来不利的全局状态。

程序使用全局状态时是很难进行测试的……当一个类使用单实例模式时(我是在谈论类的单实例模式,即通过强制使用静态的 getInstance() 方法得到单实例的类),单实例模式的使用者和此单实例的类会无可避免地耦合在一起。

依赖于静态实例意味着这些方法的声明无法显示出它们的依赖关系,因为这些方法会让单一模式的使用难上加难,也就是说用户必须了解其内在的工作代码才能正确地使用它,这让使用和测试它变得很困难。

当测试人员测试一些方法时,如果它们依赖于单实例的类,那么它们的依赖关系就变得很不明确,测试人员就可能在不知情的情况下写出由于修改共享资源而造成相互依赖的两个测试类。

Google 单实例模式检查工具可以检查出那些强制使用自身的单实例的类(单实例, singleton ),或是帮助另外一个类强制实现其单实例化的类(帮助者单实例,或称之为“ hingleton ”),或是通过一个不带参数的静态方法返回其状态(方法单实例,或称之为“ mingleton ”)的,或是有一个公开的静态字段(字段单实例,或称之为“ fingletone ”)的类,以及那些依赖于以上任一种单实例类的代码。你可以隐藏掉那些你不关心的行为。

这个工具目前还处在早期阶段,有如下一些限制

  • 在没有解开多 JAR 包以前,它无法读取字节码。
  • 它需要一个外部工具显示图形结果。
  • 它并不能发现所有的单实例对象,尤其是那些存储在 final 型字段和封装于内部类中的单实例对象。

继续关注 InfoQ,将会得到更多关于代码分析构件和工具 Google 的信息。查看英文原文: Google Singleton Detector

2007 年 8 月 13 日 00:02288
用户头像

发布了 89 篇内容, 共 95359 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

牛掰!阿里大佬用7部分讲明白Web安全攻防 渗透测试(学完可就业)

Machine Gun

网络安全 信息安全 就业 渗透测试 WEB安全

211本科面试阿里挂了:分布式+限流+通讯+数据库被问懵了!

码农之家

Java 编程 程序员 面试 刷题笔记

某招聘平台流出一套超级全面的《Java面试题总结》被疯狂转发近百万次,已助我拿下5个大厂offer。

Java架构之路

Java 程序员 架构 面试 编程语言

面面俱到!四面阿里拿offer后,才发现师哥给的面试笔记有多强大

互联网架构师小马

Java 程序员 面试 阿里 找工作

数万人跪求!阿里P8大牛手写的《Java程序性能优化实战笔记》,GitHub标星已高达十万!

Java架构之路

Java 程序员 架构 面试 编程语言

刚刚!字节跳动发布了 1179 个 Java 岗,平均薪资40K

钟奕礼

Java 编程 程序员 架构 面试

IPFS挖矿怎样才能挖更多的币?IPFS挖矿产出怎么提高?

投资矿机v:IPFS1234

IPFS挖矿怎样挖更多的币 IPFS挖矿产出怎么提高

Java高手是怎样炼成的?阿里P8技术大牛这份手写笔记告诉你答案!

Java架构之路

Java 程序员 架构 面试 编程语言

从Spring框架中的一个BUG来分析锁使用的问题

郑印

Java spring

一线互联网大厂后端面经集合(拼多多+阿里+字节跳动)你能坚持到哪一步?

Java成神之路

Java 程序员 架构 面试 编程语言

framework源码,Android学习路线指南,已整理成文档

欢喜学安卓

android 程序员 面试 移动开发

遭各大平台封杀!阿里大牛总结858道Java工程师必考面试题

周老师

Java 编程 程序员 架构 面试

In-depth Java synchronized

shniu

Java并发 并发编程 Monitor

HBase三个重要机制

五分钟学大数据

HBase 4月日更

潮汐交替,价值重组:2021数字化转型看什么?

脑极体

别当工具人了,手摸手教会你 Jenkins ! 码农很低调

比伯

Java 程序员 架构 计算机 技术宅

阿里技术官打造790页SpringCloud笔记,GitHub已标星81.6k

Java成神之路

Java 程序员 架构 面试 编程语言

字节跳动三面成功拿下offer,分享一下我的三面面经

Java成神之路

Java 程序员 架构 面试 编程语言

前端开发解决异步回调必备技能——Async/Await和Promise

三掌柜

vuejs 前端进阶 签约计划

Alibaba全套Java核心技术手册竟遭泄露,阿里内部资料真的香

周老师

Java 编程 程序员 架构 面试

王者级Java核心文档,靠着这份开发手册知识原理清单,我拿下了8个offer

Crud的程序员

Java 编程 程序员 架构

C++ 虚函数表剖析

赖猫

c++ C/C++ 封装、继承、多态

架构实战营模块一作业

刁寿钧

架构实战营

我是收藏一把好手

yes

学习

COBIT2019中核心模型(目标)、设计因素、治理系统和系统组件的关系

ming_hgm

cobit

【LeetCode】丑数Java题解

HQ数字卡

算法 LeetCode 4月日更

IPFS矿机节点怎么查询?FIL挖矿平台哪个好?

投资矿机v:IPFS1234

IPFS矿机节点怎么查询 FIL挖矿平台哪个好

【资深猎头分享】程序员面试如何避坑?

Java架构师迁哥

flutter开发环境搭建,京东面试真题解析,分享PDF高清版

欢喜学安卓

android 程序员 面试 移动开发

火爆火爆!最新分享给大家:Boss直聘转发超80W次的一套超全面试题总结

比伯

Java 架构 面试 程序人生 计算机

领域驱动设计101 - 分层

luojiahu

领域驱动设计 DDD

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

Google单实例模式检测工具-InfoQ