Definición: separa la construccion de objetos complejos de su representacion de manera que el mismo proceso de constuccion pueda crear distintas representaciones.

Participantes:

Builder: especifica una interfas abstracta para crear partes de un objeto.

ConcreteBuilder: contruye o arma parte de un objeto basandose el la implementacion de interfaz (Builder) , define y mantiene el seguiemiento de la representacion creada y provee una interfaz para la entrega del objeto.

Director: construye un objeto basandose en la interfaz (Builder).

Product: representa el objeto que sera construido en base al un ConcreteBuilder que ha realizado la representacion interna del producto y la definicion de los procesos que lo construyen, incluye clases que definen las partes que lo constituyen y las interfaces para armar las partes que formal el resultado final.

La idea con este patrón es que cada  Concretebuilder puede componer objetos complejos ubicándose detrás de una interfaz abstracta de manera que la forma en como se construye el producto sea transparente para el director.

De este modo un cliente crea un objeto del tipo Director y lo configura con el tipo de Builder que desea utilizar, el objeto Director indica al Builder cuando una parte del producto necesita ser construida , el Builder  maneja la petición y agrega partes al producto devolviendo el producto al cliente.

Como el producto esta construido detrás de una interfaz abstracta lo único que hace falta para cambiar la representación interna del producto es crear un nuevo tipo de Builder,  por esto es necesario que la interfaz Builder sea lo suficientemente general para abrigar a todo tipo de Concrete Builders.

Aquí pueden descargar las clases en C# creadas con el Visual Studio 2008

Aquí pueden descargar el diagrama de clases realizado en el PowerDesigner