es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Patrón de diseño que puede tomar obj-X u obj-Y y convertir cualquiera de ellos en obj-Z en C#

He estado lidiando con esto durante bastante tiempo, tratando de averiguar qué patrón de diseño usar o si encaja en alguno de los patrones de diseño.
Tengo 3 objetos.
Objeto X
Objeto Y
Objeto Z
El Objeto X y el Objeto Y tienen algunas similitudes entre ellos. Tengo la necesidad de transformar estos, uno a la vez, en otro objeto, que es el Objeto Z.
Pero no puedo decidir cuál es la mejor forma de hacerlo. Tengo que usar un patrón de diseño para hacerlo.
He investigado sobre el patrón de fábrica, fábrica abstracta, prototipo y constructor. Aunque todos estos parecen ser capaces de funcionar, simplemente parece forzado.
Espero que tenga sentido lo que estoy tratando de hacer…
¿Alguien conoce una forma de hacerlo?

Para simplificarlo con un pseudocódigo, es algo así:

nuevo ObjetoX(Cliente) { nombre = "bob", edad = 22, gastado = 3200, vip = false}

nuevo ObjetoY(Empleado) { nombre = "Frigg", edad = 24, cargo = "desarrollador", pagoMensual = 4000}

nuevo ObjetoZ(personas) { nombre = ObjetoX.nombre, edad = ObjetoX.edad}
nuevo ObjetoZ(personas) { nombre = ObjetoY.nombre, edad = ObjetoY.edad}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en la información proporcionada, el mejor patrón de diseño para usar en este escenario es el patrón Adaptador.

    El patrón Adaptador se utiliza para convertir una interfaz en otra que el cliente espera. Este patrón permite que objetos con interfaces incompatibles trabajen juntos. En este caso, el Objeto X y el Objeto Y tienen algunas similitudes, pero necesitan ser transformados en el Objeto Z, que tiene una interfaz diferente.

    Para implementar el patrón Adaptador, podemos crear dos adaptadores: uno para el Objeto X y otro para el Objeto Y. Los adaptadores tomarán una instancia del Objeto X o del Objeto Y y lo convertirán en una instancia del Objeto Z. La interfaz del Objeto Z será la interfaz objetivo que el cliente espera.

    // Adaptador del Objeto X
    class AdaptadorObjetoX : ObjetoZ
    {
        private ObjetoX _objetoX;
    
        public AdaptadorObjetoX(ObjetoX objetoX)
        {
            _objetoX = objetoX;
        }
    
        public string Nombre => _objetoX.nombre;
    
        public int Edad => _objetoX.edad;
    }
    
    // Adaptador del Objeto Y
    class AdaptadorObjetoY : ObjetoZ
    {
        private ObjetoY _objetoY;
    
        public AdaptadorObjetoY(ObjetoY objetoY)
        {
            _objetoY = objetoY;
        }
    
        public string Nombre => _objetoY.nombre;
    
        public int Edad => _objetoY.edad;
    }
    
    // Código del cliente
    ObjetoZ objetoZX = new AdaptadorObjetoX(new ObjetoX(Cliente) { nombre = "bob", edad = 22, gastado = 3200, vip = false });
    ObjetoZ objetoZY = new AdaptadorObjetoY(new ObjetoY(Empleado) { nombre = "Frigg", edad = 24, puestoDeTrabajo = "desarrollador", pagoMensual = 4000 });
    

    Las clases AdaptadorObjetoX y AdaptadorObjetoY implementan la interfaz ObjetoZ, que es utilizada por el cliente. Los adaptadores toman una instancia del ObjetoX o del ObjetoY, respectivamente, y la convierten en una instancia del ObjetoZ.

    El código del cliente ahora puede usar la interfaz ObjetoZ para trabajar con los objetos transformados, sin tener que preocuparse por los detalles de las interfaces originales de los objetos.

Comments are closed.