DEV Community

Rohit Cdy
Rohit Cdy

Posted on

Builder Design Pattern in C#

Builder Design Pattern in C#

Introduction
The Builder Design Pattern builds a complex object using many simple objects and a step-by-step approach. The goal is to create a generic process for constructing the complex object, which can be used to create different representations of the same object. This pattern is especially handy when:

  • You need to create an object with many optional and required fields.
  • The object’s construction process is complex.
  • Multiple representations of the object are possible.

Real-Life Analogy
Imagine building a laptop. A laptop is a complex object composed of various smaller components like LCD displays, USB ports, hard drives, batteries, keyboards, and more. To construct a laptop, we follow a generic process:

  1. Plug in the memory.
  2. Plug in the hard drive.
  3. Plug in the battery.
  4. Plug in the keyboard.
  5. Cover the laptop with a plastic case.

Using this process, we can create different types of laptops—some with 14-inch screens, others with 17-inch screens, varying RAM sizes, and so on. The Builder Design Pattern allows us to assemble these small components into a cohesive whole, following the same generic process.

Implementation in C#
In C#, you can use the Builder Design Pattern to create objects with many optional components or configurations. Here’s how it works:

  1. Define a Builder class responsible for constructing the complex object step by step.
  2. The Builder class has methods for adding components (e.g., memory, hard drive, battery).
  3. A Director class orchestrates the construction process by invoking the Builder methods.
  4. The final complex object is retrieved from the Builder.

Here’s a simplified example:

using System; // Product class (complex object) class Laptop { public int MemorySize { get; set; } public string HardDriveType { get; set; } // Other properties... public void DisplayInfo() { Console.WriteLine($"Laptop Info: Memory: {MemorySize}GB, Hard Drive: {HardDriveType}"); // Display other properties... } } // Builder interface interface ILaptopBuilder { void AddMemory(int size); void AddHardDrive(string type); // Other methods for adding components... Laptop GetLaptop(); } // Concrete builder class LaptopBuilder : ILaptopBuilder { private Laptop _laptop = new Laptop(); public void AddMemory(int size) { _laptop.MemorySize = size; } public void AddHardDrive(string type) { _laptop.HardDriveType = type; } // Other component methods... public Laptop GetLaptop() { return _laptop; } } // Director class LaptopManufacturer { public Laptop ConstructLaptop(ILaptopBuilder builder) { builder.AddMemory(8); // Example: Add 8GB RAM builder.AddHardDrive("SSD"); // Example: Add SSD // Other component additions... return builder.GetLaptop(); } } class Program { static void Main() { var builder = new LaptopBuilder(); var manufacturer = new LaptopManufacturer(); var myLaptop = manufacturer.ConstructLaptop(builder); // Display laptop info myLaptop.DisplayInfo(); } } 
Enter fullscreen mode Exit fullscreen mode

Remember that the Builder Design Pattern allows you to create different representations of the same complex object using a consistent construction process. It’s a powerful tool when dealing with intricate object creation.

Top comments (0)