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
Design patterns 工厂法模式故障_Design Patterns_Factory Pattern - Fatal编程技术网

Design patterns 工厂法模式故障

Design patterns 工厂法模式故障,design-patterns,factory-pattern,Design Patterns,Factory Pattern,我读过工厂方法模式。我在设计后一个示例时遇到了一个问题 图案的最佳设计?有人能给我一些建议吗 AbstractProduct Creator / \ / \ Product1 Product2 Creator1 Creator2 AbstractProduct ? How t

我读过工厂方法模式。我在设计后一个示例时遇到了一个问题

图案的最佳设计?有人能给我一些建议吗

     AbstractProduct                   Creator
         /     \                        /   \
    Product1 Product2             Creator1 Creator2



        AbstractProduct                         ? How to design Creator ?
       /     |         \
Product1 Product2 SubAbstractProduct
                       /     \
                  Product3 Product 4
Creator的设计方法与前一个示例相同,因为创建Product3和Product4的具体创建者仍然是AbstractProduct

答复评论:

不是真的。当此AbstractProduct createProduct()在子具体创建者类(即工厂模式)中被重写时,它可以返回SubAbstractProduct

只想补充一点,自java 1.5以来,您可以在java中执行上述操作(即,重写方法返回父类方法中返回的子类型)。

Creator的设计方式与前一示例相同,因为创建Product3和Product4的具体创建者仍然是AbstractProduct

答复评论:

不是真的。当此AbstractProduct createProduct()在子具体创建者类(即工厂模式)中被重写时,它可以返回SubAbstractProduct


只想补充一点,自java 1.5以来,您可以在java中执行上述操作(即重写方法返回父类方法中返回的子类型)。

谢谢您的回答。但如果创建者有一个方法:AbstractProduct createProduct(),那么当我使用product=createProduct()时,产品只是AbstractProduct类型,而不是SubAbstractProduct,产品不能使用SubAbstractProduct.OK中的任何扩展方法,但如果SubAbstractProduct有AbstractProduct没有的方法,例如moreMethod()。虽然product只是AbstractProduct,但如果它想使用moreMethod(),我必须键入cast。谢谢您的回答。但如果创建者有一个方法:AbstractProduct createProduct(),那么当我使用product=createProduct()时,产品只是AbstractProduct类型,而不是SubAbstractProduct,产品不能使用SubAbstractProduct.OK中的任何扩展方法,但如果SubAbstractProduct有AbstractProduct没有的方法,例如moreMethod()。虽然product只是AbstractProduct,但如果它想使用moreMethod(),我必须键入cast。