我有一个用例,其中输入是参数集(例如A、B、C、D)和数据(例如XYZ)。根据参数(A,B,C,D),我必须处理数据(XYZ)并返回。基于参数的处理逻辑可以是唯一的或通用的(例如,只在A时执行something#1,当A和C时执行something#2,当B、C和D时执行something#2,等等)。我可能还需要维护处理的顺序。
当前的实现是基于if-else循环的。我正在寻找责任链,管道设计模式。但是,对于上述任务,是否有其他合适的设计模式?
使用if-else块的示例:
I/P : A={A1,A2,A3},B={B1,B2,B3},C={C1,C2,C3},D={D1,D2,D3}和XYZ="foo“
if (A == A1)
{
//dosomething-A1
if (B == B1)
{
//dosomething-B1
if (C == C2)
{
//dosomething-C2
}
}
else if (B == B2)
{
//dosomething-B2
}
if (C == C2)
{
//dosomething-C2
if (D == D1)
{
//dosomething-D1
}
else if (D == D3)
{
//dosomething-D3
}
}
}
else if (A == A2)
{
//dosomething-A2
...
}
else if (A == A3)
{
//dosomething-A3
...
}发布于 2016-01-21 18:35:47
链条似乎非常适合这一点,如果它被重复使用。另一个选项是使用存储在映射中的处理程序,其中键是适当的参数值。这对于作为参数传递的有限的一组可能的值来说很好。你会得到这样的东西:
handlers.get( a ).handle(XYZ)所以,如果-不是你的错。但同样,这并不符合所有的目的。
发布于 2016-01-21 18:42:22
寻找类似于命令模式的东西。根据参数需要对数据进行处理。内部实施不应暴露在外部。因此,从公开接口的角度来看,它必须获取参数和数据,并且命令模式需要根据参数确定执行哪种方法。
发布于 2016-01-22 11:27:28
如果没有真正的单词大小写,很难说,但很有可能,您将能够通过良好的类层次结构减小if/ but树的大小。
多态也会使它更面向对象。
https://stackoverflow.com/questions/34931415
复制相似问题