2012-07-02 45 views
1

我已阅读Factory Method模式。设计后一个例子时遇到问题。工厂方法模式故障

该图案的最佳设计?任何人都可以给我任何建议?

 AbstractProduct     Creator 
     / \      / \ 
    Product1 Product2    Creator1 Creator2 



     AbstractProduct       ? How to design Creator ? 
    / |   \ 
Product1 Product2 SubAbstractProduct 
        / \ 
        Product3 Product 4 

回答

1

造物主可以设计相同的方式,在前面的例子,因为这创造产品3产品4混凝土创作者仍然是AbstractProduct

回答评论:

不是真的。当这个AbstractProduct createProduct()在子类Concrete Creator类(这是工厂模式)中被覆盖时,它可以返回SubAbstractProduct

只是想补充一点,你可以在java 1.5以后的java中完成上述操作(即重载方法返回父类方法中返回的子类型)。

+0

感谢您的回答。但是如果Creator有一个方法:_AbstractProduct createProduct()_,那么当我使用_product = createProduct()_时,产品只是AbstractProduct类型,而不是SubAbstractProduct,产品不能使用SubAbstractProduct中的任何扩展方法。 –

+0

好的,但是如果SubAbstractProduct有一个AbstractProduct没有的方法,例如* moreMethod()*。虽然* product *只是AbstractProduct,所以如果它想使用* moreMethod()*,我必须输入cast。 –