Exclusive Clothing Sale On Soft & Soothe

Get up to 63% off on our latest collection.

Shop Now

Builder Design Pattern in C# with Real-time Example in C#

In this article, we will discuss the Builder Design Pattern in C# with models. it is part of the Creational Design Pattern.

Definition: "Separate the construction of a complex object from its representation so that the same construction process can create different representations"

Builder Design Pattern solves the situation of increasing constructor parameters and constructors of a given class by providing a step-by-step initialization of Parameters. After step-by-step initialization, it returns the resulting constructed object at once.

 

The Builder Design Pattern is a creational design pattern that allows you to create complex objects step by step. It separates the construction of a complex object from its representation, allowing the same construction process to create different representations.

Here's a real-time example in C#: constructing a House object with various parts (walls, roof, etc.).

Step 1: Define the Product Class

public class House {

    public string Basement { get; set; }

    public string Structure { get; set; }

    public string Roof { get; set; }

    public string Interior { get; set; } 

public override string ToString()
{
    return $"House with Basement: {Basement}, Structure: {Structure}, Roof: {Roof}, Interior: {Interior}";
}
}

 

Step 2: Define the Builder Interface

public interface IHouseBuilder
{
     void BuildBasement();
     void BuildStructure();
     void BuildRoof();
     void BuildInterior();
     House GetHouse();
}

 

Step 3: Implement Concrete Builders

public class ConcreteHouseBuilder : IHouseBuilder
{
    private House _house = new House();

    public void BuildBasement()
    {
        _house.Basement = "Concrete Basement";
    }

    public void BuildStructure()
    {
        _house.Structure = "Concrete and Steel Structure";
    }

    public void BuildRoof()
    {
        _house.Roof = "Concrete Roof";
    }

    public void BuildInterior()
    {
        _house.Interior = "Painted Walls with Wooden Flooring";
    }

    public House GetHouse()
    {
        return _house;
    }
}

public class WoodenHouseBuilder : IHouseBuilder
{
    private House _house = new House();

    public void BuildBasement()
    {
        _house.Basement = "Wooden Basement";

    }

    public void BuildStructure()
    {
        _house.Structure = "Wood and Iron Structure";

    }

    public void BuildRoof()
    {
        _house.Roof = "Wooden Roof";
    }

    public void BuildInterior()
    {
        _house.Interior = "Wooden Walls with Carpet Flooring";
    }

    public House GetHouse()
    {
        return _house;
    }
}

 

Step 4: Define the Director Class

public class Director
{
    private IHouseBuilder _houseBuilder;

    public Director(IHouseBuilder houseBuilder)
    {
         _houseBuilder = houseBuilder;
    }

    public void ConstructHouse()
    {
        _houseBuilder.BuildBasement();
        _houseBuilder.BuildStructure();
        _houseBuilder.BuildRoof();
        _houseBuilder.BuildInterior();
    }

    public House GetHouse()
    {
        return _houseBuilder.GetHouse();
    }

}

 

Step 5: Use the Builder Pattern

class Program
{
    static void Main(string[] args)
    {
        IHouseBuilder concreteHouseBuilder = new ConcreteHouseBuilder();
        Director director = new Director(concreteHouseBuilder);
        director.ConstructHouse();
        House concreteHouse = director.GetHouse();
        Console.WriteLine(concreteHouse);

        IHouseBuilder woodenHouseBuilder = new WoodenHouseBuilder();
        director = new Director(woodenHouseBuilder);

        director.ConstructHouse();
        House woodenHouse = director.GetHouse();
        Console.WriteLine(woodenHouse);

    }

}

 

Explanation

  1. House: The product class, which has various parts such as Basement, Structure, Roof, and Interior.
  2. IHouseBuilder: The builder interface with methods to build different parts of the house and a method to get the final house object.
  3. ConcreteHouseBuilder and WoodenHouseBuilder: Concrete builder classes that implement the IHouseBuilder interface to build a concrete house and a wooden house, respectively.
  4. Director: The director class that constructs a house using the builder interface.
  5. Program: The client code that uses the builder pattern to create different types of houses.

This example shows how the Builder Design Pattern can be used to construct complex objects with a step-by-step approach, ensuring the same construction process can produce different representations of the object.

 

Share this

Related Posts

Previous
Next Post »

Exclusive Clothing Sale On Soft & Soothe

Get up to 63% off on our latest collection.

Shop Now