Patrón builder en c#

Posted on 20 of julio, 2015 by admin in Pattern

Patrón builder en c#

De forma introductoria como todos sabemos el patrón builder separa la construcción de un objeto complejo de su representación, un mismo objeto pude construirse de diferentes representaciones.
Utilizamos este patrón para crear objetos usando muchos diferentes objetos.

Gof

  1. Implementación

Ahora creamos las clases a partir del diagram:

Class Builder:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace com.jprograming
{
    public abstract class Builder
    {
        public abstract void BuilderCabeza();
        public abstract void BuilderCuerpo();
        public abstract void BuilderPies();
        public abstract void BuilderBrazos();
        public abstract string GetResultado();
 
    }
}

Class Robot:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace com.jprograming
{
    public class Robot
    {
        private List<string> _parts = new List<string>();
 
        public void Add(string part) {
            _parts.Add(part);
        }
 
        public string GetAllPart() {
            string rs = string.Empty;
            foreach (string item in this._parts)
            {
                rs += " " + item;
            }
            return rs;
        }
        
    }
}

Class Director:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace com.jprograming
{
    public class Director
    {
        public void Construct(Builder builder) {
            builder.BuilderBrazos();
            builder.BuilderCabeza();
            builder.BuilderCuerpo();
            builder.BuilderPies();           
        }
 
    }
}

Implementamos las clases:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace com.jprograming
{
    public class BuilderRobotCompleto : Builder
    {
        private Robot r1 = new Robot();
        
        public BuilderRobotCompleto()
        {
            BuilderCuerpo();
            BuilderCabeza();
            BuilderPies();
            BuilderBrazos();
        }
        
        public override void BuilderCabeza()
        {
            this.r1.Add("Cabeza");
        }
 
        public override void BuilderCuerpo()
        {
            this.r1.Add("Cuerpo");
        }
 
        public override void BuilderPies()
        {
            this.r1.Add("Pies");
        }
 
        public override void BuilderBrazos()
        {
            this.r1.Add("Brazos");
        }
 
        public override string GetResultado()
        {
            return r1.GetAllPart();
        }
    }
}
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace com.jprograming
{
    public class BuilderRobotSinPies : Builder
    {
        private Robot r1 = new Robot();

        public BuilderRobotSinPies() {
            BuilderCuerpo();
            BuilderCabeza();
            BuilderPies();
            BuilderBrazos();
        }

        public override void BuilderCabeza()
        {
            this.r1.Add("Cabeza");
        }

        public override void BuilderCuerpo()
        {
            this.r1.Add("Cuerpo");
        }

        public override void BuilderPies()
        {
            this.r1.Add("");
        }

        public override void BuilderBrazos()
        {
            this.r1.Add("Brazos");
        }

        public override string GetResultado()
        {
            return r1.GetAllPart();
        }

    }
}


Y al final la utilización del patrón:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace com.jprograming
{
    public partial class Ejemplo01 : Form
    {
 
        private Builder rot1 = new BuilderRobotCompleto();
        private Builder rot2 = new BuilderRobotSinPies();
 
        public Ejemplo01()
        {
            InitializeComponent();
        }
 
        private void Ejemplo01_Load(object sender, EventArgs e)
        {
 
        }
 
        private void btnRobot2_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = rot1.GetResultado();
        }
 
        private void btnRobot1_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = rot2.GetResultado();
        }
    }
}

En conclusión los patrones de creación de objetos son excelentes la hora de necesitar crear diferentes tipos de objeto.