在创建某些对象系列时,工厂方法是隐藏复杂性的好方法。美好的。但是当工厂方法本身开始变得复杂时会发生什么?
例如,我需要创建一个基于两个或多个标志/属性/值的对象,如下所示:
public class MyClassFactory
{
public static IMyClass GetClass(int prop1, int prop2, int prop3)
{
switch(prop1)
{
case (1):
switch(prop2)
{
case(1):
if(prop3 == x)
return new ImplMyClassA();
else
return new ImplMyClassB();
...
//etc ad infinitum
}
}
}
}
这很快就会变得丑陋。好的,所以您向客户隐藏了复杂性,但您的工厂代码正在成为维护的难题。
这个问题还有哪些其他解决方案?是否有某种多值查找模式可以使它更容易阅读和维护?
最佳答案
把这些碎片放在一起。 :)
匿名创建者的参数映射。
Class propertySet{
int prop1
int prop2
int prop3
public equals(..){... }
}
interface creator {
IMyClass create()
}
Map<propertySet, classCreator> creatorsMap = new HashMap();
static {
creatorsMap.add(new propertySet(1,2,3), new creator() { ... create() {return ImplMyClassA(); } });
......
creatorsMap.add(new propertySet(7,8,9), new creator() { ... create() {return ImplMyClassB();} });
}
public IMyClass create(x,y,z) {
return creatorsMap.get(new propertySet(x,y,z)).create()
}
关于c# - 过于复杂的工厂方法 - 任何解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818952/