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/1/asp.net/37.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,我最初设计了一个“简单工厂”,使用类型检查和其他方法来确定生产什么样的对象。然而,凭我的直觉,我越是走这条路,就越觉得这可能是一个糟糕的设计,我应该使用常量来生成适当的对象。我想我的问题是,这是一个糟糕的设计,我应该重写它吗?任何建议都将不胜感激 class WidgetFactory: @staticmethod def createWidget(raw_widget): if isinstance(raw_widget, list):

我最初设计了一个“简单工厂”,使用类型检查和其他方法来确定生产什么样的对象。然而,凭我的直觉,我越是走这条路,就越觉得这可能是一个糟糕的设计,我应该使用常量来生成适当的对象。我想我的问题是,这是一个糟糕的设计,我应该重写它吗?任何建议都将不胜感激

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)

和所有事情一样,这要看情况而定

如果只有这3种类型,可能就可以了。如果您必须不断添加更多类型,那么这可能是一个糟糕的设计选择

为每种类型使用不同的方法有相同的问题,因为您需要为每种类型添加方法

如果以后需要添加更多类型,可以使用
AbstractFactory
chainofresponsibility
或类似的方法来找到要使用的适当实现