676 votos

¿Cuál es la diferencia entre el Generador de patrones de Diseño y Fábrica de patrón de Diseño?

¿Cuál es la diferencia entre el Generador de patrones de diseño y la Fábrica de patrón de diseño? Que es más ventajosa y por qué?

Quiero probar y comparar/contrastar estos patrones. ¿Cómo puedo representar a mi hallazgos como una gráfica?

473voto

Adrian Grigore Puntos 15993

Con los patrones de diseño, por lo general hay ninguna "más ventajosa" solución que funcione para todos los casos. Depende de lo que usted necesita para poner en práctica.

De La Wikipedia:

  • El generador se centra en la construcción de una objeto complejo paso por paso. Resumen La fábrica hace hincapié en una familia de producto objetos (simple o complejo). Generador devuelve el producto final el paso, pero tan lejos como el Resumen De fábrica, el producto se regresó de inmediato.
  • El generador de frecuencia se basa en un Compuesto.
  • A menudo, los diseños iniciar el uso de Método de Fábrica (menos complicada, más personalizable, subclases proliferan) y evolucionar hacia Resumen de la Fábrica, El prototipo, o el Generador (más flexible, más complejo) como el diseñador descubre donde más flexibilidad necesario.
  • A veces los patrones creacionales son complementarios: el Generador se puede utilizar una de los otros patrones para implementar los componentes que se construyen. Resumen Factory, Builder, y el Prototipo puede el uso de Singleton en su las implementaciones.

Entrada de Wikipedia para la fábrica de patrón de diseño: http://en.wikipedia.org/wiki/Factory_method_pattern

Entrada de Wikipedia para el generador de patrón de diseño: http://en.wikipedia.org/wiki/Builder_pattern

364voto

Jamie McGuigan Puntos 676

Una fábrica es simplemente una función de contenedor alrededor de un constructor (posiblemente uno en una clase diferente). La diferencia clave es que un método de fábrica patrón requiere la totalidad de su objeto para ser construido en una sola llamada al método, con todos los parámetros que se pasan en una sola línea. El objeto final será devuelto.

Un generador de patrón, por otro lado, es en esencia un objeto contenedor alrededor de todos los parámetros posibles que usted podría desear para pasar a un constructor de la invocación. Esto permite utilizar los métodos setter para poco a poco construir su lista de parámetros. Un método adicional en un constructor de la clase es de una build() método, lo cual simplemente pasa el generador de objeto en el deseado constructor, y devuelve el resultado.

En estático en lenguajes como Java, esto se vuelve más importante cuando se tiene más de un puñado de (potencialmente opcional) parámetros, ya que evita la necesidad de tener telescópica constructores para todas las posibles combinaciones de parámetros. También un generador permite el uso de métodos setter para definir de sólo lectura o de campos privados que no se puede modificar directamente después se ha llamado al constructor.

Básicos De La Fábrica De Ejemplo

// Factory
static class FruitFactory {
    static Fruit create(name, color, firmness) {
        // Additional logic
        return new Fruit(name, color, firmness);
    }
}

// Usage
Fruit fruit = FruitFactory.create("apple", "red", "crunchy");

Básico Generador De Ejemplo

// Builder
class FruitBuilder {
    String name, color, firmness;
    FruitBuilder setName(name)         { this.name     = name;     return this; }
    FruitBuilder setColor(color)       { this.color    = color;    return this; }
    FruitBuilder setFirmness(firmness) { this.firmness = firmness; return this; }
    Fruit build() {
        return new Fruit(this); // Pass in the builder
    }
}

// Usage
Fruit fruit = new FruitBuilder().setName("apple")
        .setColor("red")
        .setFirmness("crunchy")
        .build();

Puede ser vale la pena comparar el código de las muestras de estas dos páginas de wikipedia:

http://en.wikipedia.org/wiki/Factory_method_pattern
http://en.wikipedia.org/wiki/Builder_pattern

283voto

Benoit Puntos 39210

El patrón de Fábrica casi puede ser visto como una versión simplificada del Generador de patrón.

En la Fábrica de patrón, la fábrica está a cargo de la creación de diversos subtipos de un objeto en función de las necesidades.

El usuario de un método de fábrica no necesita saber la exacta subtipo de ese objeto. Un ejemplo de un método de fábrica createCar puede devolver un Ford o Honda objeto introducido.

En el Generador de patrón, los diferentes subtipos son también creada por un generador de método, pero la composición de los objetos puede variar dentro de la misma subclase.

Para continuar con el coche ejemplo, usted podría tener un createCar generador método que crea un Honda-objeto introducido con un motor de 4 cilindros, o un Honda-objeto introducido con 6 cilindros. El generador de patrón permite una granularidad más fina.

Diagramas de tanto el Generador de patrón y el método de Fábrica patrón en disponible en Wikipedia.

63voto

Joel Coehoorn Puntos 190579

El diseño del generador de patrón describe un objeto que sabe cómo elaborar otro objeto de un tipo específico a lo largo de varios pasos. Contiene el estado que sea necesario para el elemento de destino en cada paso intermedio. Creo que lo que StringBuilder pasa por producir una cadena final.

La fábrica de diseño de patrón describe un objeto que sabe cómo crear diferentes pero relacionadas con el tipo de objeto en un solo paso, donde el tipo específico se selecciona con base en los parámetros dados. Creo que de la serialización del sistema, donde puede crear su serializador y construye la deseada en el objeto de todos, en una carga de la llamada.

50voto

  • La construcción de un objeto complejo paso por paso : generador de patrón

  • Un simple objeto es creado por el uso de un solo método : el método de fábrica patrón

  • La creación de Objetos mediante el uso de múltiples método de fábrica : Resumen patrón de fábrica

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X