Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象的创建-工厂方法_Java_Design Patterns - Fatal编程技术网

Java 对象的创建-工厂方法

Java 对象的创建-工厂方法,java,design-patterns,Java,Design Patterns,对于小型系统,我使用工厂方法创建相关对象(从父类继承),这样我就可以动态创建对象,而无需指定对象的类型。我必须创建另一个没有子类且对象是用户类实例的对象。要正确理解工厂方法模式,我不必为最后一个类创建工厂方法,对吗?工厂模式不仅仅是关于类型灵活性。例如,Java有Integer.valueOf(int),即使它已经有了新的整数(int)。工厂变量允许缓存:每次调用Integer.valueOf(1)都将返回相同的实例。这适用于所有不可变对象 另一个非常重要的考虑点是对象初始化:在构建对象时,有些

对于小型系统,我使用工厂方法创建相关对象(从父类继承),这样我就可以动态创建对象,而无需指定对象的类型。我必须创建另一个没有子类且对象是用户类实例的对象。要正确理解工厂方法模式,我不必为最后一个类创建工厂方法,对吗?

工厂模式不仅仅是关于类型灵活性。例如,Java有
Integer.valueOf(int)
,即使它已经有了
新的整数(int)
。工厂变量允许缓存:每次调用
Integer.valueOf(1)
都将返回相同的实例。这适用于所有不可变对象

另一个非常重要的考虑点是对象初始化:在构建对象时,有些初始化模式是不安全的。例如,调用任何可重写的方法。工厂模式也优雅地解决了这些问题


我个人认为还有第三个好处,但这可能会引起一些人的争议:我更喜欢在编写代码时不使用
new
。例如,我喜欢编写
OidableBinding(vb)
而不是
newoidablebinding(vb)
。这是通过静态导入实现的。因此,请注意:不要命名工厂方法
getInstance
或类似方法。将其命名为与类型名称类似的名称,以便静态导入时该方法看起来很好(并且不会创建名称与其他命名平淡的工厂方法冲突)。

我认为如果现有工厂正在为相关对象提供服务,那么您可能需要创建另一个工厂。我认为即使你的工厂只创建一种类型的对象也没问题。

你能粘贴一些具体的代码来演示吗?