我有一些我试图筛选的数据,但我无法找到一种聪明的方法。我们说我有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()
}
}
}
现在,我可能有很多不同的数据类型。这意味着在最坏的情况下该算法处于二次时间。是否有更好的解决方案,设计模式或任何我可以看到的优化?更具体地说,我创建了某些数据类型的实例,输入是文本行。
答案 0 :(得分:3)
解决问题的一种方法是使用预先填充的associative array,其中键是string,表示文件中的行/值,值是应返回的对象为那条线。
示例实施:
让i a=10;
成为一个asscociateive数组。在启动时,工厂应该使用 string 将此数组预先填充到对象映射:
file
然后可以传递一个字符串,它将在关联数组中查找以获取相应的预先填充的对象:
files["A"] = new A();
files["B"] = new B();
files["C"] = new C();