避免工厂类中的多个if-else语句[语言不可知]
问题描述:
我有一些数据,我试图筛选,我无法弄清楚这样做的一个聪明的方式。比方说,我有3种类型:避免工厂类中的多个if-else语句[语言不可知]
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()
}
}
}
现在,我有很多不同的数据类型,它很可能只。这意味着这种算法在最坏的情况下是二次方的。是否有更好的解决方案,设计模式或我可以看到的任何优化?更具体地说,我创建了某些数据类型的实例,输入是文本行。
答
解决此问题的一种方法是使用预填充的associative array,其中键是表示文件中的行/值的string,并且该值是应该为该行返回的对象。
样品实施:
让file
是asscociateive阵列。在启动时,工厂应预填充串此数组对象映射:
files["A"] = new A();
files["B"] = new B();
files["C"] = new C();
工厂然后可以通过一个串其将关联数组中查找,以获取相应的预填充物:
func create_obj(input_data) -> S {
return files[input_data];
}
请注意,此解决方案意味着你总是得到相同的一个实例 – 2017-10-14 08:25:33
人们可以轻松地扩展这个解决方案总是返回一个新的实例,有几种方法来实现这一目标取决于所使用的语言。解决方案的症结在于,使用关联数组来避免工厂类中的if-else。 – CKing
是的,当然,这只是一句话 – 2017-10-14 11:08:34