Course contentsShow
← C#
Lesson 193 of 1,9082. Object-Oriented Design in C#Free lesson

Builder Pattern for Complex Object Construction

You will encapsulate the step-by-step construction of complex objects to improve code clarity and validation.

In this lesson, you will learn how the Builder Pattern helps you construct complex objects step-by-step to keep your code clean and your object state valid.

The Problem: The "Telescoping Constructor"

Imagine you are building a Computer object. A computer has many parts: a CPU, RAM, storage, a GPU, and an OS. If you use a standard constructor, it might look like this:

new Computer("Intel i9", "32GB", "1TB SSD", "RTX 4090", "Windows 11");

This becomes messy quickly. What if you want to leave some options blank? You end up creating dozens of constructors, which is difficult to manage.

The Solution: The Builder Pattern

The Builder pattern separates the construction of a complex object from its representation. Instead of calling a massive constructor, you use a dedicated Builder class that lets you add parts one by one.

public class ComputerBuilder {
    private Computer _computer = new Computer();

    public ComputerBuilder SetCPU(string cpu) {
        _computer.CPU = cpu;
        return this; // Returning 'this' allows for method chaining
    }

    public ComputerBuilder SetRAM(string ram) {
        _computer.RAM = ram;
        return this;
    }

    public Computer Build() {
        // Here you can add validation logic to ensure the computer is complete
        if (_computer.CPU == null) throw new Exception("CPU is required!");
        return _computer;
    }
}

Why use this?

  1. Readability: You call methods like SetCPU() instead of passing a list of confusing strings into a constructor.
  2. Validation: In the Build() method, you can verify that the object is in a valid state before it is ever created.
  3. Flexibility: You can build different configurations of the same object without needing unique constructors for every possible combination of features.

You simply use it like this:

var myPC = new ComputerBuilder()
    .SetCPU("Intel i9")
    .SetRAM("32GB")
    .Build();

Key Takeaway: The Builder Pattern moves the complexity of object creation into a dedicated class, allowing you to build objects step-by-step while ensuring they remain valid and easy to configure.