java Builder模式与依赖项注入(例如通过Guice)
我正在开发一个简单的树结构数据库,我通常通过构建器(构建器模式)设置依赖项或可选设置。现在我不确定什么时候使用实例Guice,什么时候使用Builder模式,什么时候使用静态工厂方法而不是构造函数本身。我已经读过好几次有效的Java,我认为它至少提到了不公开构造函数的许多优点。是时候重读了;-)
那么,你知道哪些案例是可以清晰区分的吗?我不应该暴露构造器吗?例如,在每种情况下写public static Foo getInstance(...) { return new Foo(...)}
# 1 楼答案
我坚信,你不需要为一切使用依赖注入
对于
LookupService
来说,注入aDictionary
是很自然的,这样就可以通过配置替换它的实现另一方面,对于
Firewall
。它自然会创建自己的FireWallRules
,可能是通过提供的Factory
或Builder
作为指导原则,注入配置所需的,不要自动注入其他所有内容
考虑<<强> ^ {< CD7>}>
Lists.newArrayList()
考虑<<强> ^ {}>
AbstractFactory
设计模式当
时考虑<强> ^ {CD11>}>(*)
静态方法并不总是可测试的,在我看来,静态方法的存在应该总是有动机的。 工厂的典型用例是减少耦合。通过使用static factory
,这种能力完全丧失# 2 楼答案
我已经开始在我的大多数项目中使用builder,结果证明我可以并且已经用builder和singleton替换了我的所有DI
例如:
我的代码在没有DI的情况下变得更易于管理
# 3 楼答案
在你的心目中,这两个是如何接近的
当您需要处理其构造函数包含大量参数(可能是可选的)的类时,可以使用生成器模式,该模式使代码更易于读写
依赖项注入是一种有助于松散耦合的方法,可以消除高层类与底层类之间的依赖关系。例如,需要连接到数据库的类不会直接创建连接,但会“注入”连接,并且该连接可以交换到不同的数据库,而不会影响使用它的代码