Java 工厂方法,为什么我们使用静态调用从工厂获取对象

Java 工厂方法,为什么我们使用静态调用从工厂获取对象,java,design-patterns,factory-pattern,static-factory,Java,Design Patterns,Factory Pattern,Static Factory,据我所知,在使用工厂方法时,我们通过调用工厂的静态方法来获取对象。。比如Foo f=Factory.getObj()。。该方法是静态的,因为我们不需要在调用getObj方法之前创建对象,该方法将实际返回我所需的具体对象。但是为什么使用newfactory()创建Factory类的实例,然后调用req-getObj方法并不常见呢? 如果这听起来很愚蠢,很抱歉,但是为什么将工厂方法设置为静态是常见的呢 静态工厂和工厂是两个不同的东西吗?你必须问问自己: 工厂类的不同对象会有不同的行为吗?在这种情况下

据我所知,在使用工厂方法时,我们通过调用工厂的静态方法来获取对象。。比如
Foo f=Factory.getObj()
。。该方法是静态的,因为我们不需要在调用
getObj
方法之前创建对象,该方法将实际返回我所需的具体对象。但是为什么使用
newfactory()
创建
Factory
类的实例,然后调用req-getObj方法并不常见呢? 如果这听起来很愚蠢,很抱歉,但是为什么将工厂方法设置为静态是常见的呢


静态工厂和工厂是两个不同的东西吗?

你必须问问自己:

工厂类的不同对象会有不同的行为吗?在这种情况下,他们会以不同的方式创建新对象吗


答案是否定的。如果一个方法不是对象范围的,那么它是
静态的

的完美候选者。你必须问问自己:

工厂类的不同对象会有不同的行为吗?在这种情况下,他们会以不同的方式创建新对象吗



答案是否定的。如果一个方法不是对象范围,它是一个完美的候选代码<静态> <代码> .< /p> 你应该读<代码>有效的java项目1:考虑静态工厂方法而不是构造函数< /C>。这里有详细的解释。而且,经典的工厂方法设计模式不是静态的。因此,可以使用两种方式。

< P>你应该阅读<代码>有效的java项目1:考虑静态工厂方法而不是构造函数< /C>。这里有详细的解释。而且,经典的工厂方法设计模式不是静态的。因此它可以双向使用。

工厂方法确保类中只引用一个实例。在这种情况下,我认为构造函数是私有的,因此不允许直接用它创建对象。它需要通过公共静态方法(如getObj或getInstance etcAgreed)创建,工厂构造函数应该是私有的,这只是为了确保工厂只存在一个实例吗?检查这些:它们应该帮助您理解。这个工厂方法确保类中只引用一个实例。在这种情况下,我认为构造函数是私有的,因此不允许直接用它创建对象。它需要通过公共静态方法(如getObj或getInstance etcAgreed)创建,工厂构造函数应该是私有的,这只是为了确保工厂只存在一个实例吗?检查这些:它们应该帮助您理解。即使在创建对象时有一些条件,我也可以做一些事情,比如
Foo f=Factory.getObj(字符串类型)
,在
getObj
方法中,我可以根据给定的类型选择要实现的对象。那么我什么时候应该使用
新工厂()
?很抱歉,如果这听起来很愚蠢的话,
getObj()
的定义在工厂类的所有实例中都是相同的,并且不依赖于工厂类的实例变量。这意味着所有的
getObj()
实际上都是一样的,可以用一个静态方法来代替。你是说如果我有
Factory.getObj()
和Factory.getObj(字符串类型)`那么即使在对象创建的情况下,在某些条件下我也可以做类似
Foo f=Factory.getObj(字符串类型)这样的事情,不让它们静态是有意义的吗
getObj
方法中,我可以根据给定的类型选择要实现的obj。那么我什么时候应该使用
新工厂()
?很抱歉,如果这听起来很愚蠢的话,
getObj()
的定义在工厂类的所有实例中都是相同的,并且不依赖于工厂类的实例变量。这意味着所有的
getObj()
实际上都是一样的,可以用一个静态方法来代替。你是说如果我有
Factory.getObj()
和Factory.getObj(字符串类型)`那么不将它们静态化是有意义的,所以静态工厂和经典工厂方法是两件不同的事情吗?是的,有效的Java注意到:请注意,静态工厂方法与设计模式中的工厂方法模式不同。我应该记住使用静态工厂还是其他工厂取决于具体情况。valueOf使用static,没有人怀疑这是个好主意。但另一方面,使用静态方法不是OOP,不能为静态方法定义接口,不能传递工厂子类etcSo。我发现使用静态工厂有一个很大的优势,即我可以返回任何子类型的对象,这在正常的构造函数调用中是不可能的。这就是你想要指出的。静态工厂和经典工厂方法是两件不同的事情吗?是的,有效的Java注意到:注意,静态工厂方法与设计模式中的工厂方法模式不同。我应该记住使用静态工厂的天气还是其他取决于具体情况。valueOf使用static,没有人怀疑这是个好主意。但另一方面,使用静态方法不是OOP,不能为静态方法定义接口,不能传递工厂子类etcSo。我发现使用静态工厂有一个很大的优势,即我可以返回任何子类型的对象,这在正常的构造函数调用中是不可能的。这就是你想指出的吗。