双色注塑

Double injection

我们经常使用注入,这就带来了建筑问题 - 谁以及何时应该实施它。

举个简单的例子。 Class Farm 可以处理注入的 Plantable 对象。它可以是树、蔬菜等。每个 Plantable 对象都有可以启动(种植)的方式,它也被注入。

问题是谁负责二次注射?如果它是 Farm,那么它应该足够聪明,知道所有可能的 Plantable 对象,因此 Farm 成为了上帝对象。如果它是 Tree 那么使用反射并了解拥有它的 Farm 应该是一个复杂的对象。它不是简单的 Plantable 对象,它应该照顾自己,它应该了解环境、可能的农场类型等。

像 Spring 配置这样的外部配置文件不是解决方案,因为所有类型对象的数量都很大而且是动态的。

理想情况下,Plantable 和 Startable 对象应该即时添加并自行处理,不要像在 OOP 世界中那样相互依赖。

您要查找的是 Abstract factory 模式。

来自 Head first design patterns :

Provides an interface for creating families of related or dependent objects without specifying their concrete types.