描述无代码的问题:
如果 类'操作 (否则将实现Factory Method -pattern的结构),则返回现有对象引用的副本,该副本由另一个对象的操作获取,并使用它的已知类型,而不是实例化一个新对象 - 它可以被归类为工厂方法吗?
此外,如果它被认为是非工厂方法;创建ConcreteProduct的新实例的过程是否发生在ConcreteCreator中是否重要? (考虑到在JAVA中你总是最终会返回一个引用,所以只有实际的区别在于我们正在创建一个新实例而不是使用现有实例 - 但这是否会使我们有一个“完全不同”工厂方法“或不?”
JAVA中的一个最小示例:
interface Product { ... }
class ConcreteProductA { ... }
class ConcreteProductB { ... }
class ProductHolder
{
private Product foo;
/*
* May return an instance of either ConcreteProductA or ConcreteProductB
* Sets foo null, for attempting to mimic a composition relationship to holder, foo being moved into another composition relationship
*/
public Product getProduct() {
Product reference = foo;
foo = null;
return reference;
}
public void setProduct(Product foo) {
this.foo = foo;
}
}
interface Creator { public Product createProduct(); }
class ConcreteCreatorA implements Creator
{
@Override
public Product createProduct(ProductHolder holder) {
return holder.getProduct();
}
}
编辑: 注意我故意不选中方法是否返回null,这是否与问题有关?
(我的)参数:
“(使用Factory Method -pattern,when)..CreatorClass事先不知道实例化对象必须从哪个ProductClass。”
[可能是一组不正确的词;我使用翻译版本。]
(我的)反对意见:
相关但单独的问题'帖子:
对他/她的问题的一般回答: Singleton Factory
答案 0 :(得分:0)
阅读代码我假设会有一个ConcreteCreatorB
,C
等等,其中至少有一些会真正新建对象而不是重用现有对象。
所以,我猜它仍然是一个Factory方法,只要这是真的。否则,它可能不是一个 - 我无法看到让它看起来像一个,给出createProduct()
和Creator
等名称。