using System;
using System.Collections.Generic;
using System.Text;
namespace patronDecorador
{
public interface IProcesarNombres
{
String ProcesarNombres(String Nombre, String Apellido);
}
}
Ahora bien, nuestra clase (en este caso puente) debe implementar esta interfaz.
using System;
using System.Collections.Generic;
using System.Text;
namespace patronDecorador
{
public class Puente : IProcesarNombres
{
private String _caracter = ", ";
public String Caracter
{
get { return _caracter; }
set { _caracter = value.Trim(); }
}
public String ProcesarNombres(String Nombre, String Apellido)
{
return Apellido.Trim() + Caracter + Nombre.Trim();
}
}
}
El decorador también debe implementarla como se muestra a continuación.
using System;
using System.Collections.Generic;
using System.Text;
namespace patronDecorador
{
public abstract class Decorador : IProcesarNombres
{
protected IProcesarNombres _Componente;
public Decorador(IProcesarNombres Clase)
{
_Componente = Clase;
}
public virtual String ProcesarNombres(String Nombre, String Apellido)
{
return _Componente.ProcesarNombres(Nombre, Apellido);
}
}
}
Luego creamos dos clases decoradoras:
1) AgregarNumeracion:
using System;
using System.Collections.Generic;
using System.Text;
namespace patronDecorador
{
public class AgregarNumeracion : Decorador
{
private Int32 _numero = 1;
public Int32 Numero
{
get { return _numero; }
set { _numero = value; }
}
private String _separador = " - ";
public String Separador
{
get { return _separador; }
set { _separador = value; }
}
public AgregarNumeracion(IProcesarNombres Clase): base(Clase){}
public override String ProcesarNombres(String Nombre, String Apellido)
{
return Numero.ToString()+ Separador + base.ProcesarNombres(Nombre, Apellido);
}
}
}
2) AgregarNacionalidad :
using System;
using System.Collections.Generic;
using System.Text;
namespace patronDecorador
{
public class AgregarNacionalidad : Decorador
{
private String _Nacionalidad= "Argentina";
public String Nacionalidad
{
get { return _Nacionalidad; }
set { _Nacionalidad = value.Trim(); }
}
private String _separador = " - ";
public String Separador
{
get { return _separador; }
set { _separador = value; }
}
public AgregarNacionalidad(IProcesarNombres Clase): base(Clase){}
public override String ProcesarNombres(String Nombre, String Apellido)
{
return base.ProcesarNombres(Nombre, Apellido) + Separador +Nacionalidad;
}
}
}
Ahora ya se puede comenzar a usarlas. Creamos el siguiente formulario:
A continuación el código que le da la funcionalidad:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using patronDecorador;
namespace WindowsApplication1
{
public partial class Decorador : Form
{
public Decorador()
{
InitializeComponent();
}
private void btn1_Click(object sender, EventArgs e)
{
Puente MiClase = new Puente();
txt1.Text= MiClase.ProcesarNombres(txtNombre.Text,txtApellido.Text);
}
private void btn2_Click(object sender, EventArgs e)
{
Puente MiClase = new Puente();
AgregarNumeracion Deco1 = new AgregarNumeracion(MiClase);
txt2.Text = Deco1.ProcesarNombres(txtNombre.Text,txtApellido.Text);
}
private void btn3_Click(object sender, EventArgs e)
{
Puente MiClase = new Puente();
AgregarNacionalidad Deco2 = new AgregarNacionalidad(MiClase);
Deco2.Nacionalidad = txtNacionalidad.Text;
txt3.Text = Deco2.ProcesarNombres(txtNombre.Text, txtApellido.Text);
}
private void btn4_Click(object sender, EventArgs e)
{
Puente MiClase = new Puente();
AgregarNumeracion Deco1 = new AgregarNumeracion(MiClase);
AgregarNacionalidad Deco2 = new AgregarNacionalidad(Deco1);
Deco2.Nacionalidad = txtNacionalidad.Text;
txt4.Text = Deco2.ProcesarNombres(txtNombre.Text, txtApellido.Text);
}
private void btn5_Click_1(object sender, EventArgs e)
{
AgregarNacionalidad FormaReducida = new AgregarNacionalidad(new AgregarNumeracion(new Puente()));
FormaReducida.Nacionalidad = txtNacionalidad.Text;
txt5.Text = FormaReducida.ProcesarNombres(txtNombre.Text, txtApellido.Text);
}
}
}
Como verán con una sola y sencilla linea se agrega funcionalidad al objeto:
AgregarNacionalidad FormaReducida = new AgregarNacionalidad(new AgregarNumeracion(new Puente()));
Esta es la principal ventaja del patrón Decorador.
A continuación su aplicación en VFP.
No hay comentarios.:
Publicar un comentario