6.Patrón de creación. Prototype deep
- Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
- En esta ocasión veremos el patrón de diseño Prototype deep. Este patrón de diseño prototipo tiene como finalidad crear nuevos objetos clonando una instancia creada previamente.Es similar al patrón prototype superficial. Sin embargo, utilizando este patrón podremos clonar objetos que contengan otros objetos complejos.
- En el siguiente vídeo tenéis un ejemplo de este patrón de diseño.
- Os dejo el código de las diferentes clases vistas en el vídeo:
- Código de las clases Persona y DetallePesona
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrototypeDeep
{
class Persona : ICloneable
{
int altura;
int peso;
DetallePesona detalle = new DetallePesona();
public int Altura { get => altura; set => altura = value; }
public int Peso { get => peso; set => peso = value; }
internal DetallePesona Detalle { get => detalle; set => detalle = value; }
private object CopiaSuperfical()
{
return this.MemberwiseClone();
}
private object copiaProfunda()
{
Persona clon = this.MemberwiseClone() as Persona;
clon.detalle = new DetallePesona();
clon.detalle.ColorOjos = this.detalle.ColorOjos;
clon.detalle.EstaCAlvo = this.detalle.EstaCAlvo;
return clon;
}
public object Clone()
{
return copiaProfunda();
}
}
class DetallePesona
{
string colorOjos;
Boolean estaCAlvo;
public bool EstaCAlvo { get => estaCAlvo; set => estaCAlvo = value; }
public string ColorOjos { get => colorOjos; set => colorOjos = value; }
}
}
- Código de la clase Program:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PrototypeDeep
{
class Program
{
static void Main(string[] args)
{
Persona p = new Persona();
p.Altura = 170;
p.Peso = 80;
p.Detalle = new DetallePesona();
p.Detalle.EstaCAlvo = false;
p.Detalle.ColorOjos = "rojos";
Persona clon = p.Clone() as Persona;
clon.Detalle.EstaCAlvo = true;
clon.Detalle.ColorOjos = "Verdes";
Console.WriteLine(p.Detalle.ColorOjos);
Console.WriteLine(p.Detalle.EstaCAlvo);
Console.WriteLine(clon.Detalle.ColorOjos);
Console.WriteLine(clon.Detalle.EstaCAlvo);
Console.ReadLine();
}
}
}
No hay comentarios:
Publicar un comentario