我有一个接口(interface),IMessage
和一个类,其中有多种方法用于创建不同类型的消息,如下所示:
class MessageService
{
IMessage TypeAMessage(param 1, param 2)
IMessage TypeBMessage(param 1, param 2, param 3, param 4)
IMessage TypeCMessage(param 1, param 2, param 3)
IMessage TypeDMessage(param 1)
}
我不希望此类完成创建这些消息的所有工作,因此它只是委托(delegate)给 MessageCreatorFactory
,它根据给定的类型生成 IMessageCreator
(基于消息类型的枚举(TypeA、TypeB、TypeC 等)
interface IMessageCreator
{
IMessage Create(MessageParams params);
}
所以我有 4 个 IMessageCreator
实现:TypeAMessageCreator
、TypeBMessageCreator
、TypeCMessageCreator
、TypeDMessageCreator
我对此表示同意,除了因为每种类型需要不同的参数,我必须创建一个 MessageParams
对象,其中包含 4 个不同参数的 4 个属性,但只使用其中的一些在每个 IMessageCreator
中。
有替代方案吗?我的另一个想法是在 Create 方法中使用一个参数数组作为参数,但这似乎更糟糕,因为您不知道参数是什么。或者在接口(interface)中创建 Create 的多个重载,如果它们不适合该特定实现,则让其中一些重载抛出异常(即您调用了需要更多参数的方法,因此您应该调用其他重载之一。)
这看起来不错吗?有更好的解决办法吗?
最佳答案
这实在是违背了Factory method pattern的精神。 。如果您需要不同的参数来构造不同的类型,则隐式地强制调用者提前知道正在构造什么类型。这完全消除了这种模式的好处。
例如,如果您指定一个枚举(TypeA、TypeB、TypeC),您也可以直接构造 TypeA。如果你想允许多个子类实现TypeA,就为TypeA创建一个工厂...
关于.net - 如果我有一个工厂方法,不同的实现需要不同的参数,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567658/