【发布时间】:2011-08-06 10:11:50
【问题描述】:
我有一个场景,我将数据“请求”对象传递给服务,并且服务本身必须根据请求中的数据创建许多不同的“处理器”。
每个处理器本身都可以是多种不同类型中的一种。因此,例如,粗略的丑陋实现可能如下所示:
public Collection<IProcessor> UglyCreationalMethod(Request request)
{
var processors = new Collection<IProcessor>();
if(request.Type == RequestType.SomeVal)
{
if(request.Id > 1000)
{
processors.Add(new ProcessLargeRequest(request));
}
else
{
processors.Add(new ProcessSmallRequest(request));
}
}
else (request.Type == RequestType.SomeOtherVal)
{
if(request.Source == RequestSource.User)
{
processors.Add(new ProcessUserRequest(request));
}
else
{
processors.Add(new ProcessCorpRequest(request));
}
}
if(request.SomeProp == "blah")
processors.Add(new ProcessBlahRequest(request));
// ... etc ad infinitum :)
return processors;
}
我正在寻找一种可扩展的模式,它隐藏了决定服务需要创建的处理器类型的令人讨厌的逻辑,因此它比上述丑陋的代码更简洁,更易于维护。
我知道工厂方法,但仅这些是不够的。
建议表示赞赏。
【问题讨论】:
-
出于好奇,为什么工厂方法不够用?
标签: c# java design-patterns