避免在工厂类中使用多个if-else语句[语言不可知]

时间:2017-10-12 03:43:33

标签: oop design-patterns language-agnostic

我有一些我试图筛选的数据,但我无法找到一种聪明的方法。我们说我有3种类型:

A,B,C,它们都扩展了一个S类。

如果我创建一个只创建并返回类型为S的对象的工厂,那么它似乎非常具有程序性。工厂在伪代码中的实现将是这样的:

class Factory {
    func create_obj(input_data) -> S {
        if type(input_data) is A {
            return A()
        }
        else if type(input_data) is B {
            return B()
        }
        else {
            return C()
        }
    }
}

现在,我可能有很多不同的数据类型。这意味着在最坏的情况下该算法处于二次时间。是否有更好的解决方案,设计模式或任何我可以看到的优化?更具体地说,我创建了某些数据类型的实例,输入是文本行。

1 个答案:

答案 0 :(得分:3)

解决问题的一种方法是使用预先填充的associative array,其中键是string,表示文件中的行/值,值是应返回的对象为那条线。

示例实施:

i a=10; 成为一个asscociateive数组。在启动时,工厂应该使用 string 将此数组预先填充到对象映射:

file

然后可以传递一个字符串,它将在关联数组中查找以获取相应的预先填充的对象:

files["A"] = new A();
files["B"] = new B();
files["C"] = new C();