Java:伪造工厂的闭包以创建域对象
最初,我们只是在领域类中新建依赖项,但这使得无法在测试中控制其值。
同样,我们似乎不应该将这种依赖关系传递到域对象的构造函数中,因为它不是定义对象的状态,而只是定义对象使用的状态。
我们最终得到了类似于以下代码的内容,其中将域对象作为内部类:
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
Java:伪造工厂的闭包以创建域对象相关推荐
- js 闭包作用域和作用域链_Java:伪造工厂的闭包以创建域对象
js 闭包作用域和作用域链 最近,我们想创建一个域对象,该对象需要具有外部依赖关系才能进行计算,并且希望能够在测试中解决该依赖关系. 最初,我们只是在领域类中引入依赖关系,但这使得无法在测试中控制其值 ...
- java创建对象后花括号_java – 创建数组对象和使用花括号分配数组有什么区别?...
在Java中,我在网上发现了一些教程,当涉及到数组时,它们的教学方式不同 例1: 使用"new"关键字创建数组对象,然后为其指定值. int[] values; values = ...
- java 调用父类的变量_java创建子类对象设置并调用父类的变量操作
通过子类调用父类的变量,有两种方法: 1.把父类的变量设置成public: package triangle.opengl.wlz.stu.childusefathervariable; import ...
- Java设计模式-工厂方法模式的使用和介绍
一.工厂方法模式简介 1.定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorph ...
- java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式
工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...
- JavaScript实现创建自定义对象的常用方式总结
2019独角兽企业重金招聘Python工程师标准>>> 1. 对象字面量方式 对象字面量方式是创建自定义对象的首选模式,简单方便. var per = { name:'zhangsa ...
- 【Java设计模式 设计模式与范式】创建型模式 四:抽象工厂模式
本篇Blog继续学习创建型模式,创建型模式的主要关注点是怎样创建对象,它的主要特点是将对象的创建与使用分离,这样可以降低系统的耦合度,使用者不需要关注对象的创建细节.本篇学习的是抽象工厂模式.由于学习 ...
- java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现
工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...
- Java 静态工厂方法详解
Java 静态工厂方法详解 本文章主要是对<Effective Java>对静态工厂方法的理解 第一次使用静态工厂方法是在HIT<Software Construction>课 ...
最新文章
- 处理器嵌入室内校正数字音频平台
- 中国电子学会图形化四级编程题:食堂取餐
- Django-View中绕过RSCF验证
- 《几何与代数导引》例2.6
- PHP的 preg_match_all
- python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...
- 基于PYNQ-Z2重建BNN工程
- 使用迁移学习和TensorFlow.js在浏览器中进行AI情感检测
- location定位_javascript自学记录:location对象
- 报表制作1(传入对象和其他参数)
- 俄罗斯方块c语言代码及注释,俄罗斯方块C语言代码
- 计算机应用类,计算机应用领域分为几大类
- 150. Evaluate Reverse Polish Notation逆波兰表达式
- java工具类 文件zip压缩 base64 加密,base64解密 zip解压
- 关于OLAP数据仓库的归纳总结
- SayAsYouWish:Fine-grained Control of Image Caption Generation with Abstract Scene Graphs ---- 论文阅读笔记
- 会计分录、科目、账户
- php编程好学不,PHP编程一般学哪些内容 PHP编程好学吗
- 2021年编程列入高考_什么是2021年最佳的后端编程语言?
- 从设计入门到腰椎间盘突出 - 分析用户体验设计中的规律与逻辑