js 闭包作用域和作用域链

最近,我们想创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系。

最初,我们只是在领域类中引入依赖关系,但这使得无法在测试中控制其值。

同样,似乎我们不应该将该依赖项传递到域对象的构造函数中,因为它不是定义对象的状态,而只是定义对象使用的状态。

我们最终得到了类似于以下代码的内容,其中将域对象作为内部类:

public class FooFactory {private final RandomService randomService;public FooFactory(RandomService randomService) {this.randomService = randomService;}public Foo createFoo(String bar, int baz) {return new Foo(bar, baz);}class Foo {private String bar;private int baz;public Foo(String bar, int baz) {this.bar = bar;this.baz = baz;}public int awesomeStuff() {int random = randomService.random(bar, baz);return random * 3;}}
}

然后,对该代码进行的测试可能如下所示:

public class FooFactoryTest {@Testpublic void createsAFoo() {RandomService randomService = mock(RandomService.class);when(randomService.random("bar", 12)).thenReturn(13);FooFactory.Foo foo = new FooFactory(randomService).createFoo("bar", 12);assertThat(foo.awesomeStuff(), equalTo(39));}
}

解决该问题的方法有点冗长,但似乎工作得很好。

参考: Java:伪造工厂的闭包以从我们的JCG合作伙伴 创建域对象   Mark Needham博客上的 Markh Needham。

翻译自: https://www.javacodegeeks.com/2012/03/java-faking-closure-with-factory-to.html

js 闭包作用域和作用域链

js 闭包作用域和作用域链_Java:伪造工厂的闭包以创建域对象相关推荐

  1. Java:伪造工厂的闭包以创建域对象

    最近,我们想要创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中新建依赖项,但这使得无法在测试中控制其值. 同样,我们似乎不应该将这 ...

  2. JS 作用域和作用域链

    作用域 JavaScript 中的作用域是我们可以有效访问变量或函数的区域.作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 有两种类型的作用域:全局作用域.局 ...

  3. JS基础篇之作用域、执行上下文、this、闭包

    前言:JS 的作用域.执行上下文.this.闭包是老生常谈的话题,也是新手比较懵懂的知识点.当然即便你作为老手,也未必真的能理解透彻这些概念. 一.作用域和执行上下文 作用域: js中的作用域是词法作 ...

  4. Javascript的作用域,作用域链,闭包

    1,作用域和作用域链概念 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 1.1 全局作用域,在代码 ...

  5. js作用域及作用域链概念理解及使用

    之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时 ...

  6. 函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例

    函数作为返回值练习 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  7. 图解Javascript——作用域、作用域链、闭包

    什么是作用域? 作用域是一种规则,在代码编译阶段就确定了,规定了变量与函数的可被访问的范围.全局变量拥有全局作用域,局部变量则拥有局部作用域. js是一种没有块级作用域的语言(包括if.for等语句的 ...

  8. 相学java_从这两套题,重新认识JS的this、作用域、闭包、对象

    日常开发中,我们经常用到this.例如用Jquery绑定事件时,this指向触发事件的DOM元素:编写Vue.React组件时,this指向组件本身.对于新手来说,常会用一种意会的感觉去判断this的 ...

  9. JavaScript重难点解析4(作用域与作用域链、闭包详解)

    JavaScript重难点解析4(作用域与作用域链.闭包详解) 作用域与作用域链 作用域 作用域与执行上下文 作用域链 闭包 闭包理解 将函数作为另一个函数的返回值 将函数作为实参传递给另一个函数调用 ...

最新文章

  1. 微软私有云分享(R2)11-应答文件浅析
  2. 【数据挖掘知识点四】参数估计
  3. 应用虚拟化的五大理由
  4. SpingMVC ModelAndView, Model,Control以及参数传递
  5. 【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?
  6. sql server 向mysql前移数据-单引号问题
  7. 环保公益PSD分层海报,小景合成美好世界
  8. 广东财经大学计算机专业学费,广东财经大学各专业一年至少需要交的学费
  9. 字节一面,面试官拿System.out.println()考了我半个小时?我懵逼了...
  10. Python使用Reportlab处理PDF数据 - 页面布局
  11. php调用声卡,声卡转换器的作用是什么
  12. 汉庭加盟:连锁酒店影视房的市场分析
  13. 别着急抢iPhone 13了!拍照有马赛克,苹果确认部分iPhone13存在bug
  14. python获取文件大小
  15. 微信小程序实验四 —— 扫雷游戏
  16. 作业1:关于使用python中scikit-learn(sklearn)模块,实现鸢尾花(iris)相关数据操作(数据加载、标准化处理、构建聚类模型并训练、可视化、评价模型)
  17. synergy软件win10和ubuntu16.04局域网下使用一套键盘鼠标系统
  18. 1056: 幸运数字 Python
  19. Linux 设备树(Device Tree)简介
  20. 对话知道创宇丨如何守住内容安全生命线?

热门文章

  1. 使用ADO.NET访问数据库
  2. 2018蓝桥杯省赛---java---A---10(付账问题)
  3. 2020蓝桥杯省赛---java---B---5(排序)
  4. Android 全局字体设置 例如楷体
  5. 使用navicat 复制 数据库 使用mysql5.7 utf8mb4 utf8mb4_general_ci 爬虫的时候就支持表情包了
  6. 程序员成长之路 java面试指导(作者说的极好要看) 静下心看
  7. 索引失效的场景(面试)
  8. 静态资源Css基础语法
  9. jdk 取整数_JDK 15中的确切绝对整数
  10. java面试常见面试问题_Java面试准备:15个Java面试问题