难道所有的工厂方法都不能是静态的吗?生产产品的东西需要状态吗?什么时候适合使用实例工厂或静态工厂方法?你能给我一些区分这两者的例子吗?
发布于 2012-12-09 07:20:38
假设您所说的“实例工厂方法”实际上是指GoF的“工厂方法”,那么“静态工厂方法”这个术语是由Joshua Bloch在他的书"Effective“中描述的。我在谷歌上搜索了一下这些网站:
http://sourcemaking.com/design_patterns/factory_method
:
希望这有助于让区别变得更清晰一点。
听从马尔沃的建议:
示例(Java代码):
public abstract class Product { ... }
public class ConcreteProduct extends Product { ... }
public abstract class Creator {
public void anOperation() { ... product = factoryMethod(); ... }
public abstract Product factoryMethod();
}
public class ConcreteCreator extends Creator {
public Product factoryMethod() { return new ConcreteProduct(); }
}示例(Java代码):
public class Boolean {
...
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
...
}发布于 2011-11-16 13:58:42
我目前的偏好是使工厂方法不是静态的,以便更容易测试。您不能在运行时更改静态工厂方法调用,而如果我可以为对象提供一个工厂实现,那么我就可以更彻底地测试它,因为我可以更好地控制上下文和对象图。
发布于 2011-11-16 13:42:02
如果你从你的工厂返回一个单例,那么你需要确保你只有一个实例,如果你每次调用工厂都要创建一个新的实例,那么就把它设为静态的。
https://stackoverflow.com/questions/8147163
复制相似问题