Un programa recibe una lista de mensajes (tipo de base). Cada mensaje en la lista debe ser procesado de acuerdo a su tipo (tipo de descendiente). Sin embargo, diferentes mensajes necesitan diferentes entradas para ser procesados correctamente.¿Cuáles son las diferencias entre los patrones Builder, Factory Method y Abstract Factory?
¿Cómo se llama la siguiente técnica? (No he comprobado este código en un compilador)
abstract class MessageProcessor
{
public static MessageProcessor GetProcessor(Message message, DataDomain data)
{
if (message.GetType() == typeof(FooMessage))
{
return new FooMessageProcessor(message, data.Name, data.Classification);
}
else if (message.GetType() == typeof(BarMessage))
{
return new BarMessageProcessor(message, data.AccountNo, data.CreditLimit);
}
else
throw new SomeException("Unrecognized type");
}
public abstract void Process();
}
¿Y este?
static class MessageProcessorFactory
{
public static MessageProcessor GetProcessor(Message message, DataDomain data)
{
if (message.GetType() == typeof(FooMessage))
{
return new FooMessageProcessor(message, data.Name, data.Classification);
}
else if (message.GetType() == typeof(BarMessage))
{
return new BarMessageProcessor(message, data.AccountNo, data.CreditLimit);
}
else
throw new SomeException("Unrecognized type");
}
}
Y ¿cómo se llama si puedo inyectar la clase ProcessBuilder en un MessageProcessor (usando una propiedad o Setter) y luego llamar Proceso?
¿Qué técnica sería el mejor patrón para resolver este problema?
Haría algo así, pero acabo de utilizar el objeto DataDomain como ejemplo. En nuestra aplicación, no hay ningún tipo que encapsule todos los valores de entrada, y en algunos casos significaría pasar un parámetro a un método que no lo necesita – ilitirit
Para este ejemplo, tendría que considerar la compensación entre un diseño complejo para tener en cuenta los diferentes parámetros de entrada y un diseño más simple que puede dar como resultado argumentos de método no utilizados. Si la variación no es fija o pequeña, vaya con un diseño más complejo o punt y use un objeto genérico –
Peor estilo de sangría ¡Nunca! :) – Gili