我有一个相当复杂的对象,希望为其添加执行多个命令的功能。每个命令可能需要不同的数字参数;它们的数量(参数)必须是可变的,以便为非常不同的处理请求腾出空间。 我勾画的解决方案如下:
public enum ProcessingMethod {NONE, THIS, THAT, ETC};
public interface IProcessing
{
void Process(ProcessingMethod ProcType, Double[] Parameters);
}
这种方式实现接口的对象:
- 通过第一个参数能够识别所请求的处理类型;
- 通过数组长度知道传递了多少个参数;
- 只传递数字参数,可以从double转换到int、long和float。
- 封装了处理参数所需的知识,考虑到位置。
这种设计似乎很简单,能够完成工作,但看起来,我强烈感觉这种设计是不灵活的过程式推理的症状。我试图更好地思考Command设计模式,但它对我来说似乎有些过度。此外,它并不完全符合我的需求。
我的问题是:有没有更面向对象的简单解决方案来满足这些要求?
IProcessing.Process()
将接受基类ProcessingParameters
并转换为正确的派生类型。这将极大地减少因位置而传递错误参数的机会(而且您不会被限制于数字值)。更好的解决方案存在,但我们需要更多上下文。然后,请删除那个“有异味”的enum
。您可能需要一个策略或者简单地使用多个实现,这取决于您尝试做什么。 - Adriano Repetti