Design Patterns in Go
  • Portada
  • Introducción
  • Publicación
  • Parte I
    • Sobre Go
    • POO en Go
      • Objetos
      • Herencia / Composición
      • S.O.L.I.D
  • Parte II
    • Patrones de Diseño
      • GoF
      • Patrones de Comportamiento
        • Strategy
        • Chain of Responsibility
        • Command
        • Template Method
        • Memento
        • Interpreter
        • Iterator
        • Visitor
        • State
        • Mediator
        • Observer
      • Patrones Creacionales
        • Singleton
        • Builder
        • Factory Method
        • Abstract Factory
        • Prototype
      • Patrones Estructurales
        • Composite
        • Adapter
        • Bridge
        • Proxy
        • Decorator
        • Facade
        • Flyweight
  • Parte III
    • Conclusiones
    • Acerca De
  • Recursos de interés
  • Glosario
Con tecnología de GitBook
En esta página
  • Propósito
  • Estructura
  • Participantes
  • Implementación
  • Código de ejemplo

¿Te fue útil?

  1. Parte II
  2. Patrones de Diseño
  3. Patrones Creacionales

Prototype

AnteriorAbstract FactorySiguientePatrones Estructurales

Última actualización hace 5 años

¿Te fue útil?

Propósito

Según el libro "Patrones de Diseño" el patrón Prototype "especifica los tipos de objetos a crear por medio de una instancia prototípica, y crea nuevos objetos copiando dicho prototipo".

Estructura

Participantes

  • Prototipo:

    • declara la interfaz para clonarse.

  • PrototipoConcreto:

    • implementa una operación para clonarse.

  • Cliente:

    • crea una variable pidiéndole a un prototipo que se clone.

Implementación

No se observan impedimentos y/o modificaciones de la estructura original del patrón para su implementación en Go.

Código de ejemplo

En este ejemplo queremos que un elemento químico sea capaz de clonarse a sí mismo indicando cuantas veces fue clonado.

Implementación:

// Prototipo Interface
type Prototipo interface {
    Clonar() *Elemento
}

// Prototipo Concreto
type Elemento struct {
    Material string
    Copias   int
}

func (e *Elemento) Clonar() *Elemento {
    return &Elemento{
        Material: e.Material,
        Copias:   e.Copias + 1,
    }
}

Se puede probar la implementación del patrón de la siguiente forma:

elementoA := &Elemento{"Azufre", 1}

elementoB := elementoA.Clonar()
elementoB.Material = elementoB.Material + " (fortificado)"

elementoC := elementoB.Clonar()

fmt.Printf("El elemento A es de %s y se clono %d veces\n", elementoA.Material, elementoA.Copias)
fmt.Printf("El elemento B es de %s y se clono %d veces\n", elementoB.Material, elementoB.Copias)
fmt.Printf("El elemento C es de %s y se clono %d veces\n", elementoC.Material, elementoC.Copias)

|

Atención: Esta publicación se encuentra abandonada. Puede acceder a la versión vigente en

Código de ejemplo
Ejecutar código
https://leanpub.com/designpatternsingo
[29]