Home Backend Development C#.Net Tutorial .NET builder pattern explained

.NET builder pattern explained

Dec 12, 2016 pm 05:58 PM

Definition of builder pattern:

Separates the construction of a complex object from its representation, so that the same construction process can create different representations. Such a design pattern is called the builder pattern

Builder pattern structure diagram:

.NET builder pattern explained

Builder pattern roles:

1 builder: Specify abstract interfaces for each component that creates a product object.
2 ConcreteBuilder: Implement the Builder interface to construct and assemble the various components of the product, define and clarify the representation it creates, and provide an interface for retrieving the product.
3 Director: Construct an object using the Builder interface.
4 Product: Represents a constructed complex object. ConcreteBuilder creates an internal representation of the product and defines its assembly process, including the classes that define the component parts, including the interfaces for assembling those parts into the final product.

The following is an example of building a house in real life to explain the builder pattern:

1. Abstract the builder interface, which contains the conditions for creating a house type to be implemented, the number of rooms returned after creation, and this item Description of the house.

/// <summary>
/// 抽象建造者
/// </summary>
public interface IHouse
{
/// <summary>
/// 创建房子种类的条件
/// </summary>
/// <returns></returns>
bool GetBackyard();
 
/// <summary>
/// 创建的房间数
/// </summary>
/// <returns></returns>
long NoOfRooms();
 
/// <summary>
/// 描述
/// </summary>
/// <returns></returns>
string Description();
}
Copy after login

2. Inherit the IHouse interface, the specific builder, here creates a room, including a living room, a kitchen, a bathroom, and a bedroom, a total of four rooms such as a house.

public class CRoom
{
public string RoomName { get; set; }
}
 
/// <summary>
/// 具体建造者
/// </summary>
public class CSFH:IHouse
{
private bool mblnBackyard;
private Hashtable Rooms;
 
public CSFH() {
CRoom room = new CRoom();
room.RoomName = "一楼客厅";
Rooms = new Hashtable();
Rooms.Add("room1", room);
 
room = new CRoom();
room.RoomName = "一楼厨房";
Rooms.Add("room2", room);
 
room = new CRoom();
room.RoomName = "一楼洗手间";
Rooms.Add("room3", room);
 
room = new CRoom();
room.RoomName = "一楼卧室";
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 = "这个房子共 " + Rooms.Count + " 间 \n";
while (myEnumerator.MoveNext())
{
strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName;
}
return strDescription;
}
}
Copy after login

3. Inherit the IHouse interface, and the specific builder creates a house here, which only includes a bedroom, a living room, and a kitchen, a total of three rooms.

/// <summary>
/// 其他具体建造者
/// </summary>
public class CApt:IHouse
{
private bool mblnBackyard;
private Hashtable Rooms;
 
public CApt()
{
Rooms = new Hashtable();
CRoom room = new CRoom();
room.RoomName = "卧室";
Rooms.Add("room1", room);
 
room = new CRoom();
room.RoomName = "客厅";
Rooms.Add("room2", room);
 
room = new CRoom();
room.RoomName = "厨房";
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 = "这个房子一共 " + Rooms.Count + " 间 \n";
while (myEnumerator.MoveNext())
{
 strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName;
}
return strDescription;
}
}
Copy after login

4. Create a guide to guide which builder to build what kind of room.

/// <summary>
/// 指导者
/// </summary>
public class CDirector
{
public IHouse BuildHouse(bool blnBackyard)
{
if (blnBackyard)
{
return new CSFH();
}
else
{
return new CApt();
}
}
}
Copy after login

5. Create:

static void Main(string[] args)
{
CDirector objDirector = new CDirector();//实例化指导者
IHouse objHouse;
string Input = Console.ReadLine();//输入条件指导哪位创建者创建房间
objHouse = objDirector.BuildHouse(bool.Parse(Input));
Console.WriteLine(objHouse.Description());
Console.ReadLine();
}
Copy after login

The builder pattern is mainly used to "build a complex object step by step", where "step by step" is a stable algorithm, and complex objects The various parts of the product often change

The product does not require abstract classes, especially when this pattern is used due to the complexity of the algorithm for creating objects or when this pattern is applied to the generation process of the product, the final result may vary greatly, not much It is possible to refine an abstract product class.

The previous abstract factory pattern solves the demand changes of "series objects", and the Builder pattern solves the demand changes of "object parts".

The use of builder pattern allows the internal appearance of the product to be changed independently. Using the builder pattern allows the client to avoid knowing the details of the internal composition of the product. Each Builder is relatively independent and has nothing to do with other Builders.

The builder pattern is suitable for properties of product objects that need to be generated. The builder pattern can force the generation order. The product objects that need to be generated have complex internal structures.

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to add next-level C compiler How to add next-level C compiler Mar 03, 2025 pm 05:44 PM

This article explains how to create newline characters in C using the \n escape sequence within printf and puts functions. It details the functionality and provides code examples demonstrating its use for line breaks in output.

What are the alternatives to NULL in C language What are the alternatives to NULL in C language Mar 03, 2025 pm 05:37 PM

This article explores the challenges of NULL pointer dereferences in C. It argues that the problem isn't NULL itself, but its misuse. The article details best practices for preventing dereferences, including pre-dereference checks, pointer initiali

Which C language compiler is better? Which C language compiler is better? Mar 03, 2025 pm 05:39 PM

This article guides beginners on choosing a C compiler. It argues that GCC, due to its ease of use, wide availability, and extensive resources, is best for beginners. However, it also compares GCC, Clang, MSVC, and TCC, highlighting their differenc

Is NULL still important in modern programming in C language? Is NULL still important in modern programming in C language? Mar 03, 2025 pm 05:35 PM

This article emphasizes the continued importance of NULL in modern C programming. Despite advancements, NULL remains crucial for explicit pointer management, preventing segmentation faults by marking the absence of a valid memory address. Best prac

What are the web versions of C language compilers? What are the web versions of C language compilers? Mar 03, 2025 pm 05:42 PM

This article reviews online C compilers for beginners, focusing on ease of use and debugging capabilities. OnlineGDB and Repl.it are highlighted for their user-friendly interfaces and helpful debugging tools. Other options like Programiz and Compil

Method of copying code by C language compiler Method of copying code by C language compiler Mar 03, 2025 pm 05:43 PM

This article discusses efficient code copying in C IDEs. It emphasizes that copying is an IDE function, not a compiler feature, and details strategies for improved efficiency, including using IDE selection tools, code folding, search/replace, templa

C language online programming website C language compiler official website summary C language online programming website C language compiler official website summary Mar 03, 2025 pm 05:41 PM

This article compares online C programming platforms, highlighting differences in features like debugging tools, IDE functionality, standard compliance, and memory/execution limits. It argues that the "best" platform depends on user needs,

C language compiler installation tutorial (computer version) C language compiler installation tutorial (computer version) Mar 03, 2025 pm 05:41 PM

This tutorial guides users through installing C compilers on Windows, macOS, and Linux. It details installation for popular compilers (MinGW, Visual Studio, Xcode, GCC), explains environment variable configuration, and offers troubleshooting steps

See all articles