English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Definición del patrón de constructor:
Separar la construcción de un objeto complejo de su representación, permitiendo que el mismo proceso de construcción cree diferentes representaciones, este patrón de diseño se conoce como patrón de constructor.
Diagrama de estructura del patrón de constructor:
Roles del patrón de constructor:
1 Builder: Especifica las interfaces abstractas para los componentes de un objeto de producto.
2 ConcreteBuilder: Implementa la interfaz Builder para construir y ensamblar los componentes del producto, define y especifica la representación que crea y proporciona una interfaz para recuperar el producto.
3 Director: Construye un objeto que utiliza la interfaz Builder.
4 Product: Representa el objeto complejo construido. ConcreteBuilder crea la representación interna del producto y define su proceso de ensamblaje, que incluye las clases que definen los componentes y las interfaces para ensamblar estos componentes en el producto final.
A continuación, mediante ejemplos de construcción de casas en la vida real, se interpreta el patrón de constructor:
1.Abstracta la interfaz de constructor, que contiene las condiciones para crear el tipo de casa, el número de habitaciones devueltas después de su creación, y la información de descripción de la casa.
/// <summary> /// Constructor abstracto /// </summary> public interface IHouse { /// <summary> /// condiciones para crear el tipo de casa /// </summary> /// <returns></returns> bool GetBackyard(); /// <summary> /// número de habitaciones creadas /// </summary> /// <returns></returns> long NoOfRooms(); /// <summary> /// descripción /// </summary> /// <returns></returns> string Description();
2.Hereda la interfaz IHouse, constructor específico, aquí se creó una habitación, que incluye sala de estar, cocina, baño, dormitorio, en total cuatro habitaciones, formando así una casa.
public class CRoom { public string RoomName { get; set; } /// <summary> /// Constructor específico /// </summary> public class CSFH : IHouse { private bool mblnBackyard; private Hashtable Rooms; public CSFH() { CRoom room = new CRoom(); room.RoomName = "sala de estar de planta baja"; Rooms = new Hashtable(); Rooms.Add("room1", room); room = new CRoom(); room.RoomName = "cocina de planta baja"; Rooms.Add("room2", room); room = new CRoom(); room.RoomName = "baño de planta baja"; Rooms.Add("room3", room); room = new CRoom(); room.RoomName = "habitación de planta baja"; Rooms.Add("room4",room); mblnBackyard = true; public bool GetBackyard() { return mblnBackyard; public long NoOfRooms() { return Rooms.Count; public string Description() { IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator(); string strDescription = "Esta casa tiene un total de " + Rooms.Count + " 间 \n"; while (myEnumerator.MoveNext()) { strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; return strDescription;
3.Hereda la interfaz IHouse, constructor específico, aquí se creó una casa, que incluye solo tres habitaciones: dormitorio, sala de estar y cocina.
/// <summary> /// otros constructores específicos /// </summary> public class CApt:IHouse { private bool mblnBackyard; private Hashtable Rooms; public CApt() { Rooms = new Hashtable(); CRoom room = new CRoom(); room.RoomName = "Habitación"; Rooms.Add("room1", room); room = new CRoom(); room.RoomName = "Sala de estar"; Rooms.Add("room2", room); room = new CRoom(); room.RoomName = "Cocina"; Rooms.Add("room3", room); mblnBackyard = false; public bool GetBackyard() { return mblnBackyard; public long NoOfRooms(){ return Rooms.Count; public string Description(){ IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator(); string strDescription = "Esta casa tiene en total " + Rooms.Count + " 间 \n"; while (myEnumerator.MoveNext()) { strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; return strDescription;
4.Creación del director, dirige a qué constructor debe construir qué tipo de habitación.
/// <summary> /// Director /// </summary> public class CDirector { public IHouse BuildHouse(bool blnBackyard) { if (blnBackyard) { return new CSFH(); else { return new CApt();
5.Creación:
static void Main(string[] args) { CDirector objDirector = new CDirector();//Instanciación del director IHouse objHouse; string Input = Console.ReadLine();//Las condiciones de entrada guían a qué constructor crear la habitación objHouse = objDirector.BuildHouse(bool.Parse(Input)); Console.WriteLine(objHouse.Description()); Console.ReadLine();
El patrón Builder se utiliza principalmente para "construir un objeto complejo paso a paso", en el que "paso a paso" es un algoritmo estable, mientras que las partes del objeto complejo cambian con frecuencia
El producto no necesita una clase abstracta, especialmente en los casos en los que el algoritmo de creación del objeto es complejo y se utiliza este patrón o se aplica este patrón al proceso de generación del producto, los resultados finales pueden ser muy diferentes, es poco probable que se pueda extraer una clase de producto abstracta.
El patrón de fábrica abstracta resuelve el cambio de necesidades de objetos de serie, el patrón Builder resuelve el cambio de necesidades de objetos de parte.
El uso del patrón Builder permite que la apariencia interna del producto pueda cambiar independientemente. El uso del patrón Builder permite que el cliente no necesite saber los detalles de la composición interna del producto
Cada Builder es relativamente independiente y no tiene relación con otros Builder.
El patrón Builder es adecuado para los objetos de producto que necesitan que las propiedades del objeto generado dependan entre sí, el patrón Builder puede forzar la secuencia de generación. El objeto de producto generado tiene una estructura interna compleja.
Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y también espero que todos los amigos apoyen la tutorial de alarido.
Declaración: El contenido de este artículo se ha obtenido de la red, el copyright pertenece al propietario original, el contenido se ha subido por los usuarios de Internet de manera autónoma, este sitio web no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume la responsabilidad legal relevante. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w.3Avisos: El contenido de este artículo se ha obtenido de la red, el copyright pertenece al propietario original, el contenido se ha subido por los usuarios de Internet de manera autónoma, este sitio web no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume la responsabilidad legal relevante. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando pruebas relacionadas, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.