可以在工厂模式中进行类型检查吗?

时间:2014-08-11 16:08:02

标签: design-patterns factory-pattern

我最初设计了一个简单的工厂"使用类型检查和其他方法来找出要生成的对象类型。然而,根据我的直觉,越往往这条道路越多,它看起来可能是一个糟糕的设计,我应该使用常量来产生适当的对象。我想我的问题是,这是一个糟糕的设计,我应该重写它吗?任何建议都非常感谢。

class WidgetFactory:

    @staticmethod
    def createWidget(raw_widget):
        if isinstance(raw_widget, list):
            return ListWidget(raw_widget)
        elif FileWidget.isSupportedFile(raw_widget):
            return FileWidget(raw_widget)
        elif DBWidget.isSupportedDB(raw_widget):
            return DBWidget(raw_widget)

1 个答案:

答案 0 :(得分:1)

与所有事情一样,这取决于。

如果只有这三种类型,那可能就行了。如果你不得不继续添加更多类型,那么它可能是一个糟糕的设计选择。

对每种类型使用不同的方法会产生同样的问题,因为您需要为每种类型添加方法。

如果您以后需要添加更多类型,则可以使用AbstractFactoryChainOfResponsiblity或类似内容来查找要使用的相应实现。