En esta ocasión continúo con la serie de artículos acerca de patrones y antipatrones de arquitectura. Espero que les sea útil. Ejemplificaré utilizando VB.NET y C# en cada uno de los patrones.
Tipo de patrón
Creador de objetos
Objetivo
Separar la trucción de un objeto complejo de su representación, de modo que un solo constructor pueda crear diferentes representaciones.
Motivación
Es importante en muchos casos tener objetos que tienen diferentes características pero que comparten una estructura en común, el problema viene de que los diferentes objetos en común pueden ser ilimitados, por lo tanto es muy útil el poder modificar las diferentes opciones sin tener que modificar el objeto que lee las características. Cada uno de los sub objetos de la clase principal se especializan en diferentes características pero se construyen desde un solo lugar. El patrón constructor captura todas las relaciones entre la clase principal y sus subclases, cada subclase especializada es llamada constructor especializado y el lector de sub clases es llamado director.
Aplicación
Debe usarse el patrón Constructor cuando el algoritmo para la creación de un objeto complejo deba ser independiente de las partes que lo conforman y cómo son ensambladas y cuando el proceso de construcción deba permitir diferentes representaciones del objeto construído.
Estructura


Participantes
Constructor: ConstructorDeDodgeAvenger. Establece una interfase abstracta para crear las partes de un objeto producto.
Constructores concretos: Avenger20SEMTX, Avenger24SEATX, AvengerSXTATX y AvengerSXTATXSport. Construyen y ensamblan partes del producto implementando la interfase del constructor.
Director: Armadora. Construye un objeto utilizando la interfase del constructor.
Producto: DodgeAvenger. Representa el objeto concreto que se está construyendo, los constructores concretos construyen la represeon interna del producto y definen el proceso por el cuál es ensamblado. Incluye clases que definen las partes que lo constituyen, incluyendo las interfases para ensamblar las partes en el resultado final.
Colaboración
- El Cliente crea el objeto Director y lo configura utilizando el constructor deseado.
- El Director notifica al Constructor cuando una parte del producto debe ser construída.
- El Constructor maneja las peticiones del Director y añade las partes del Producto.
- El Cliente obtiene el producto del Constructor.
El siguiente diagrama de interacción ilustra la manera en que el objeto Constructor y el objeto Director interactúan con el Cliente.

Consecuencias
Los beneficios del uso del patrón Constructor son los siguientes:
- Permite variar la representación interna de un producto.
- Aisla el código de representación y el de construción.
- Da un mayor control en el proceso de construcción.
Implementación
Un ejemplo de implementación puede ser un configurador de automóviles, este genera las propiedades comunes del modelo de automóvil pero deja a los constructores concretos la tarea de asignar accesorios opcionales según el tipo de edición de atomóvil que se elija construír. Nuevas ediciones (representaciones) del mismo modelo de automóvil pueden construírse sobre la misma clase constructora sin necesidad de cambiar la lógica de construcción de las demás ediciones.
Código de ejemplo
VB.NET
Namespace Patrones
Public Enum TipoDeEstereo
AM_FM_CD_MP3
AM_FM_CD_MP3_ControlDeAudioEnElVolante
End Enum
Public Enum NumeroDeBocinas
Cuatro = 4
Seis = 6
End Enum
Public Enum TipoDeVolante
Plastico_AjusteInclinacion_AjusteTelescopico
Piel_AjusteInclinacion_AjusteTelescopico
End Enum
Public Enum TipoDeRines
Acero17
Aluminio17
End Enum
Public Enum TipoMotor
_1998_4cil_16valvulasDOHC
_2360_4cil_16valvulasDOHC
End Enum
Public Enum Potencia
_158HP_6400rpm
_172HP_6000rpm
End Enum
Public Enum Torque
_141Lb_Ft_5000rpm
_165Lb_Ft_4400rpm
End Enum
Public Enum Transmision
Manual5Velocidades
Automatica4Velocidades
End Enum
Public Class DodgeAvenger
Dim _Estereo As TipoDeEstereo
Dim _Bocinas As NumeroDeBocinas
Dim _ControlDeVelocidad As Boolean = True
Dim _Acabados As String = "Imitación aluminio en la palanca de cambios e imitación titanio en las puertas"
Dim _Seguros As String = "Eléctricos a control remoto"
Dim _Vestiduras As String = "Tela"
Dim _Volante As TipoDeVolante
Dim _Direccion As String = "Hidráulica"
Dim _AireAcondicionado As Boolean = True
Dim _Retrovisores As String = "Electricos"
Dim _Cristales As String = "Electricos"
Dim _Rines As TipoDeRines
Dim _Frenos As String = "2 De disco 2 ventilados delanteros"
Dim _InmovilizadorElectronicoMotor As Boolean = True
Dim _BolsasDeAire As String = "Conductor y pasajero"
Dim _Motor As TipoMotor
Dim _Potencia As Potencia
Dim _Torque As Torque
Dim _Transmision As Transmision
Dim _Spoiler As Boolean
Dim _UConnect As Boolean
Dim _Quemacocos As Boolean
Dim _FarosDeNiebla As Boolean
Public Sub New()
End Sub
Public Sub ConfiguraEstereo(ByVal estereo As TipoDeEstereo)
Me._Estereo = estereo
End Sub
Public Sub ConfiguraBocinas(ByVal bocinas As NumeroDeBocinas)
Me._Bocinas = bocinas
End Sub
Public Sub ConfiguraVolante(ByVal volante As TipoDeVolante)
Me._Volante = volante
End Sub
Public Sub ConfiguraRines(ByVal rines As TipoDeRines)
Me._Rines = rines
End Sub
Public Sub ConfiguraMotor(ByVal motor As TipoMotor)
Me._Motor = motor
End Sub
Public Sub ConfiguraPotencia(ByVal potencia As Potencia)
Me._Potencia = potencia
End Sub
Public Sub ConfiguraTorque(ByVal torque As Torque)
Me._Torque = torque
End Sub
Public Sub ConfiguraTransmision(ByVal transmision As Transmision)
Me._Transmision = transmision
End Sub
Public Sub ConfiguraSpoiler(ByVal spoiler As Boolean)
Me._Spoiler = spoiler
End Sub
Public Sub ConfiguraUConnect(ByVal uConnect As Boolean)
Me._UConnect = uConnect
End Sub
Public Sub ConfiguraQuemacocos(ByVal quemaCocos As Boolean)
Me._Quemacocos = quemaCocos
End Sub
Public Sub ConfiguraFarosDeNiebla(ByVal farosDeNiebla As Boolean)
Me._FarosDeNiebla = farosDeNiebla
End Sub
End Class
Friend MustInherit Class ConstructorDeDodgeAvenger
Protected Avenger As DodgeAvenger
Public Sub New()
End Sub
Public Function ObtenerAvenger() As DodgeAvenger
Return Me.Avenger
End Function
Public Sub CreaNuevoAvenger()
Me.Avenger = New DodgeAvenger()
End Sub
Public MustOverride Sub PreparaEstereo()
Public MustOverride Sub PreparaBocinas()
Public MustOverride Sub PreparaVolante()
Public MustOverride Sub PreparaRines()
Public MustOverride Sub PreparaMotor()
Public MustOverride Sub PreparaPotencia()
Public MustOverride Sub PreparaTorque()
Public MustOverride Sub PreparaTransmision()
Public MustOverride Sub PreparaSpoiler()
Public MustOverride Sub PreparaUConnect()
Public MustOverride Sub PreparaQuemacocos()
Public MustOverride Sub PreparaFarosDeNiebla()
End Class
Friend Class Avenger20SEMTX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._1998_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._158HP_6400rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Acero17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._141Lb_Ft_5000rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Manual5Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SEATX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Acero17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SXTATX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Aluminio17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SXTATXSport
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(True)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(True)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Aluminio17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(True)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(True)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Armadora
Private ConfiguradorAvenger As ConstructorDeDodgeAvenger
Public Sub ConfiguradorDeConstructorDeDodgeAvenger(ByVal Configuracion As ConstructorDeDodgeAvenger)
Me.ConfiguradorAvenger = Configuracion
End Sub
Public Function ObtenerAvenger() As DodgeAvenger
Return Me.ConfiguradorAvenger.ObtenerAvenger()
End Function
Public Sub ConfigurarAvenger()
Me.ConfiguradorAvenger.CreaNuevoAvenger()
Me.ConfiguradorAvenger.PreparaBocinas()
Me.ConfiguradorAvenger.PreparaEstereo()
Me.ConfiguradorAvenger.PreparaFarosDeNiebla()
Me.ConfiguradorAvenger.PreparaMotor()
Me.ConfiguradorAvenger.PreparaPotencia()
Me.ConfiguradorAvenger.PreparaQuemacocos()
Me.ConfiguradorAvenger.PreparaRines()
Me.ConfiguradorAvenger.PreparaSpoiler()
Me.ConfiguradorAvenger.PreparaTorque()
Me.ConfiguradorAvenger.PreparaTransmision()
Me.ConfiguradorAvenger.PreparaUConnect()
Me.ConfiguradorAvenger.PreparaVolante()
End Sub
End Class
Friend Class Agencia
Public Sub MetodoDeLlamado()
Dim MiAgencia As Armadora = New Armadora()
Dim ConfiguradorAvenger20SEMTX As New Avenger20SEMTX()
Dim ConfiguradorAvenger24SEATX As New Avenger24SEATX()
Dim ConfiguradorAvenger24SXTATX As New Avenger24SXTATX()
Dim ConfiguradorAvenger24SXTATXSport As New Avenger24SXTATXSport()
MiAgencia.ConfiguradorDeConstructorDeDodgeAvenger(ConfiguradorAvenger24SXTATXSport)
MiAgencia.ConfigurarAvenger()
Dim AutoConfigurado As DodgeAvenger = MiAgencia.ObtenerAvenger()
End Sub
End Class
End Namespace
C#
using System;
using System.Collections.Generic;
using System.Text;
namespace Patrones{
public enum NumeroDeBocinas
{
Cuatro = 4,
Seis = 6
}
public enum Potencia
{
_158HP_6400rpm,
_172HP_6000rpm
}
public enum TipoDeEstereo
{
AM_FM_CD_MP3,
AM_FM_CD_MP3_ControlDeAudioEnElVolante
}
public enum TipoDeRines
{
Acero17,
Aluminio17
}
public enum TipoDeVolante
{
Plastico_AjusteInclinacion_AjusteTelescopico,
Piel_AjusteInclinacion_AjusteTelescopico
}
public enum TipoMotor
{
_1998_4cil_16valvulasDOHC,
_2360_4cil_16valvulasDOHC
}
public enum Torque
{
_141Lb_Ft_5000rpm,
_165Lb_Ft_4400rpm
}
public enum Transmision
{
Manual5Velocidades,
Automatica4Velocidades
}
public class DodgeAvenger
{
private string _Acabados = "Imitación aluminio en la palanca de cambios e imitación titanio en las puertas";
private bool _AireAcondicionado = true;
private NumeroDeBocinas _Bocinas;
private string _BolsasDeAire = "Conductor y pasajero";
private bool _ControlDeVelocidad = true;
private string _Cristales = "Electricos";
private string _Direccion = "Hidráulica";
private TipoDeEstereo _Estereo;
private bool _FarosDeNiebla;
private string _Frenos = "2 De disco 2 ventilados delanteros";
private bool _InmovilizadorElectronicoMotor = true;
private TipoMotor _Motor;
private Potencia _Potencia;
private bool _Quemacocos;
private string _Retrovisores = "Eléctricos";
private TipoDeRines _Rines;
private string _Seguros = "Eléctricos a control remoto";
private bool _Spoiler;
private Torque _Torque;
private Transmision _Transmision;
private bool _UConnect;
private string _Vestiduras = "Tela";
private TipoDeVolante _Volante;
public void ConfiguraBocinas(NumeroDeBocinas bocinas)
{
this._Bocinas = bocinas;
}
public void ConfiguraEstereo(TipoDeEstereo estereo)
{
this._Estereo = estereo;
}
public void ConfiguraFarosDeNiebla(bool farosDeNiebla)
{
this._FarosDeNiebla = farosDeNiebla;
}
public void ConfiguraMotor(TipoMotor motor)
{
this._Motor = motor;
}
public void ConfiguraPotencia(Potencia potencia)
{
this._Potencia = potencia;
}
public void ConfiguraQuemacocos(bool quemaCocos)
{
this._Quemacocos = quemaCocos;
}
public void ConfiguraRines(TipoDeRines rines)
{
this._Rines = rines;
}
public void ConfiguraSpoiler(bool spoiler)
{
this._Spoiler = spoiler;
}
public void ConfiguraTorque(Torque torque)
{
this._Torque = torque;
}
public void ConfiguraTransmision(Transmision transmision)
{
this._Transmision = transmision;
}
public void ConfiguraUConnect(bool uConnect)
{
this._UConnect = uConnect;
}
public void ConfiguraVolante(TipoDeVolante volante)
{
this._Volante = volante;
}
}
internal abstract class ConstructorDeDodgeAvenger
{
protected DodgeAvenger Avenger;
public void CreaNuevoAvenger()
{
this.Avenger = new DodgeAvenger();
}
public DodgeAvenger ObtenerAvenger()
{
return this.Avenger;
}
public abstract void PreparaBocinas();
public abstract void PreparaEstereo();
public abstract void PreparaFarosDeNiebla();
public abstract void PreparaMotor();
public abstract void PreparaPotencia();
public abstract void PreparaQuemacocos();
public abstract void PreparaRines();
public abstract void PreparaSpoiler();
public abstract void PreparaTorque();
public abstract void PreparaTransmision();
public abstract void PreparaUConnect();
public abstract void PreparaVolante();
}
internal class Avenger20SEMTX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._1998_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._158HP_6400rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Acero17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._141Lb_Ft_5000rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Manual5Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SEATX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Acero17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SXTATX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Aluminio17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SXTATXSport : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(true);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(true);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Aluminio17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(true);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(true);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Armadora
{
private ConstructorDeDodgeAvenger ConfiguradorAvenger;
public void ConfiguradorDeConstructorDeDodgeAvenger(ConstructorDeDodgeAvenger Configuracion)
{
this.ConfiguradorAvenger = Configuracion;
}
public void ConfigurarAvenger()
{
this.ConfiguradorAvenger.CreaNuevoAvenger();
this.ConfiguradorAvenger.PreparaBocinas();
this.ConfiguradorAvenger.PreparaEstereo();
this.ConfiguradorAvenger.PreparaFarosDeNiebla();
this.ConfiguradorAvenger.PreparaMotor();
this.ConfiguradorAvenger.PreparaPotencia();
this.ConfiguradorAvenger.PreparaQuemacocos();
this.ConfiguradorAvenger.PreparaRines();
this.ConfiguradorAvenger.PreparaSpoiler();
this.ConfiguradorAvenger.PreparaTorque();
this.ConfiguradorAvenger.PreparaTransmision();
this.ConfiguradorAvenger.PreparaUConnect();
this.ConfiguradorAvenger.PreparaVolante();
}
public DodgeAvenger ObtenerAvenger()
{
return this.ConfiguradorAvenger.ObtenerAvenger();
}
}
internal class Agencia
{
public void MetodoDeLlamado()
{
Armadora MiAgencia = new Armadora();
Avenger20SEMTX ConfiguradorAvenger20SEMTX = new Avenger20SEMTX();
Avenger24SEATX ConfiguradorAvenger24SEATX = new Avenger24SEATX();
Avenger24SXTATX ConfiguradorAvenger24SXTATX = new Avenger24SXTATX();
Avenger24SXTATXSport ConfiguradorAvenger24SXTATXSport = new Avenger24SXTATXSport();
MiAgencia.ConfiguradorDeConstructorDeDodgeAvenger(ConfiguradorAvenger24SXTATXSport);
MiAgencia.ConfigurarAvenger();
DodgeAvenger AutoConfigurado = MiAgencia.ObtenerAvenger();
}
}
}
Usos conocidos
Ejemplos de usos conocidos son por ejemplo un parser (Director) que tome un constructor como parámetro, genere la notificación al constructor cada que reconozca una construcción válida y rerese el resultado al cliente; generar un constructor que sea producto y director al mismo tiempo y que pueda construír a partir de sus propios cambios de parámetros.
Patrones relacionados
Fabrica abstracta, Combinación
Etiquetas: .NET Básico, Arquitectura de software », Buenas prácticas, C Sharp », Fiabilidad y manejabilidad », VB
Patrones y antipatrones de arquitectura: Constructor
Escrito por Alfonso Lara Ramos @ 17:47 

|
|
|
|
|
|
|
|
|
|
|
| 
Contenidos relacionados: Google, Live Search, Tafiti, Yahoo