我试图简洁地描述当使用工厂,为我和我的团队。何时使用抽象工厂模式?
- When to use factory patterns?
- (有用的PDF链接断开)
- How do you create your Factories?
- (更多 '如何',而不是:我碰到下面的相关问题,这在一定程度帮助了跑'when')
- What is your threshold to use factory instead of a constructor to create an object?
- (一些一般性的回答)
- Factory Pattern. When to use factory methods?
- (更多关于工厂方法比工厂类)
- When to use Factory method pattern?
- (再次更关于工厂方法)
基于这些链接,和一堆其他来源(在底部列出),我想出了以下内容:
当使用抽象工厂模式:
-
当你使用一个接口VAR或 '新' 运营商
-
- 例如User user = new ConcreteUserImpl();在某些时候
- 和你正在写的代码应该是可测试/扩展
说明:
- 接口,通过其本身的性质意味着多种实现(便于进行单元测试)
- 接口变量暗示符合OCP和LSP的代码(支持子分类)
- 使用“新”运营商的突破OCP/DI,因为高度耦合的类很难检测或更改
“难道我创建的每个对象类型的工厂?这似乎过分。“
- 没有,你可以有一个(或几个)产生了大量的(通常是相关的)对象类型
- 如appFactory.createUser()的工厂; appFactory.createCatalog();等
当不使用厂家:
- 新的对象是非常简单的,不太可能是子类
- 例如List list = new ArrayList();
- 新的对象是不感兴趣的测试
- 没有依赖性
- 执行没有相关的或长期运行工作
- 例如Logger log = new SimpleLogger();
参考文献:
- http://googletesting.blogspot.com/2008/08/where-have-all-singletons-gone.html
- http://misko.hevery.com/2008/07/08/how-to-think-about-the-new-operator/
- http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/
- http://en.wikipedia.org/wiki/Dependency_Injection
- http://en.wikipedia.org/wiki/Open_Closed_Principle
- http://en.wikipedia.org/wiki/Liskov_substitution_principle
我的问题是:是我的总结准确,是否有意义?有什么我忽略了吗?
在此先感谢。
这个Java为什么相关?它不应该是语言不可知的吗? – 2010-12-02 03:07:02
@ the_drow:固定,谢谢。 – Luke 2010-12-02 18:17:56
我讨厌振兴老话题,但是... 我不同意记录器应该像上面那样新建起来。我经常在不同的测试环境中运行不同的记录器。我将环境配置为使用特定的记录器并将其注入到记录的对象中。 (我甚至可能会注入数组记录器。) – aridlehoover 2013-03-19 23:35:03