测试

一个原因是单元不容易用单元测试处理。你不能控制实例化,并且它们的性质可能跨调用保持状态。

为此,dependency injection的原则是流行的。每个类都注入(配置)他们需要的函数(而不是通过单例访问器派生)类,因此测试可以控制使用哪些依赖类实例(并提供模拟,如果需要)。

诸如Spring之类的框架将控制它们的对象的生命周期,并且经常创建单例,但是这些对象被框架注入到它们的依赖对象中。因此,代码库本身不将对象视为单例。

例如而不是这个(例如)

public class Portfolio {

private Calculator calc = Calculator.getCalculator();

}

你会注入计算器:

public class Portfolio {

public Portfolio(Calculator c) {

this.calc = c;

}

}

因此,组合对象不知道/关心计算器的多少实例存在。测试可以注入一个虚拟的计算器,使测试容易。

并发

通过限制对象的一个​​实例,线程的选项是有限的。可能必须保护对单独对象的访问(例如,经由同步)。如果您可以维护这些对象的多个实例,那么您可以定制实例数量到您运行的线程,并增加代码库的并发能力。

用java代码实现Singleton_为什么在Java代码中实现Singleton模式(有时)被认为是Java世界中的反模式?...相关推荐

  1. 五种 Ajax 反模式:避免常见的 Ajax 代码陷阱!

      developerWorks 中国  >  XML | Web development  > Ajax 和 XML: 五种 Ajax 反模式 避免常见的 Ajax 代码陷阱 文档选项 ...

  2. java结束全部操作代码_Java创建与结束线程代码示例

    这篇文章主要介绍了Java创建与结束线程代码示例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考. 本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程 ...

  3. Java 性能优化:教你提高代码运行的效率

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:五月的仓颉 cnblogs.com/xrq730/p/486 ...

  4. java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码

    CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...

  5. java.lang.Instrument 动态修改替换类代码

    java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...

  6. java代码中何处以main开始,Gradle-user guide-第7章 Java 快速开始

    第7章java快速开始 7.1java插件 我们知道,Gradle是一个多用途的构建工具,它可以构建你想在构建脚本中实现的任何事情.不过,作为开箱即用的产品,它不会做任何构建脚本不包含的任务. 大多数 ...

  7. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

  8. java http 401_服务器返回HTTP响应代码:401,URL:https

    我正在使用Java访问HTTPS站点,该站点以XML格式返回显示内容.我在URL本身中传递了登录凭据.这是代码片段: DocumentBuilderFactory dbf = DocumentBuil ...

  9. 造成java.io.IOException: Stream Closed异常的代码

    造成java.io.IOException: Stream Closed异常的代码 参考文章: (1)造成java.io.IOException: Stream Closed异常的代码 (2)http ...

  10. 编程笔试(解析及代码实现):猴子吃桃。猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个…的C++、Java、Python、C#等语言代码实现

    编程笔试(解析及代码实现):猴子吃桃.猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个. 第二天早上又将剩下的桃子吃了一半,还是不过瘾,又多吃了一个.以后每天都吃前一天剩下的一半再加一个 ...

最新文章

  1. 使用pytorch构建2D和3D人脸比对库(使用face-alignment)
  2. 面试官:前端跨页面通信,你知道哪些方法?
  3. PyCaret 2.0在这里-新增功能?
  4. net core 获取网站目录
  5. 全文目录和全文索引的关系
  6. 为什么你必须了解云原生?!
  7. .NET中Web Service的异常机制
  8. 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
  9. 云服务器运维管理面板有哪些?
  10. numpy创建单位矩阵和对角矩阵
  11. 2018-8-10-WPF-修改图片颜色
  12. 似然比和p值不同的原因_二代P值:传统P值的升级 | 社论前沿
  13. 此计算机未连接到网络.单击以连接,此计算机无法连接到家庭组win7
  14. pinbox: 我用过最好的收藏工具
  15. 电大计算机网考怎么过,国家开放大学电大考试计算机网考题库大全(必过).doc...
  16. SPH算法简介(四): Hello, SPH
  17. 二、Tools实用工具-FinalShell 纯国产可同步的ssh+ftp工具
  18. 2021 icpc 沈阳 J-Luggage Lock
  19. 各种不等式的解法收集【初级辅导和中级辅导】
  20. 研发部门压力管理探讨

热门文章

  1. Java注解是如何工作的?
  2. 突然远程连接不上mysql_navicat突然连接不上远程linux服务器上的mysql
  3. 3399 cpu绑核
  4. pytorch scatter_函数学习笔记
  5. CoTNet-重磅开源!京东AI Research提出新的主干网络CoTNet,在CVPR上获得开放域图像识别竞赛冠军
  6. GNOME启动时激活NumLock
  7. yolov5损失函数笔记
  8. java.lang.RuntimeException: setParameters failed
  9. TX2 安装QT Creator
  10. web直播方案总结: