Friday, 29 November 2013

Builder Design pattern - Sequence Diagram

Master Software Architecture & Clean Code!

Subscribe to Ram N Java for clean code, design pattern implementations, and practical Java tutorials!

SUBSCRIBE NOW

Understanding the Builder Pattern Sequence Flow

The Builder Design Pattern is a creational pattern designed to separate the step-by-step construction of a complex object from its actual representation. While a class diagram illustrates static structural relationships, a UML Sequence Diagram highlights the dynamic runtime interaction between collaborating objects over time.

By tracing the message exchange among the Client, Director, Builder, and Product, developers can clearly see the exact invocation timeline and lifecycle required to safely produce a fully initialized instance.

Key Sequence Steps Explained

  • Step 1 (Instantiation): The Client instantiates a concrete builder object (e.g., ConcreteBuilder).
  • Step 2 (Configuration): The Client creates the Director, passing the ConcreteBuilder instance via constructor injection or a setter method.
  • Step 3 (Orchestration): The Client calls director.construct().
  • Step 4 (Stepwise Build Messages): The Director issues ordered messages to the builder interface (such as builder.buildPartA(), builder.buildPartB()). The builder continuously updates the internal Product state.
  • Step 5 (Retrieval): The Client invokes builder.getResult() (or retrieves it through the director) to receive the completed, immutable product.

Runtime Execution in Java Code

Here is clean Java code illustrating the precise method invocations reflected in the Builder pattern sequence diagram:

// Product
class Product {
    private String partA;
    private String partB;

    public void setPartA(String partA) { this.partA = partA; }
    public void setPartB(String partB) { this.partB = partB; }

    @Override
    public String toString() {
        return "Product [partA=" + partA + ", partB=" + partB + "]";
    }
}

// Builder Interface
interface Builder {
    void buildPartA();
    void buildPartB();
    Product getResult();
}

// Concrete Builder
class ConcreteBuilder implements Builder {
    private Product product = new Product();

    @Override
    public void buildPartA() {
        product.setPartA("Initialized Part A");
    }

    @Override
    public void buildPartB() {
        product.setPartB("Initialized Part B");
    }

    @Override
    public Product getResult() {
        return this.product;
    }
}

// Director
class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        // Sequenced message invocations to Builder
        builder.buildPartA();
        builder.buildPartB();
    }
}

// Client
public class SequenceDiagramDemo {
    public static void main(String[] args) {
        // Sequence: 1. Instantiate Builder
        Builder builder = new ConcreteBuilder();

        // Sequence: 2. Instantiate Director with Builder
        Director director = new Director(builder);

        // Sequence: 3. Trigger construction flow
        director.construct();

        // Sequence: 4. Retrieve final assembled product
        Product finalProduct = builder.getResult();
        System.out.println("Result: " + finalProduct);
    }
}

Watch More Related Design Pattern Tutorials


Click here to watch in Youtube : https://www.youtube.com/watch?v=jWvEmjSTOgI

Click the below Image to Enlarge
Builder Design pattern - Sequence Diagram

















See also:

  • Builder Design Pattern - Introduction
  • Builder Design pattern - Real Time Example [Meal Package]
  • Builder Design pattern - Real Time Example [Animal Toys]
  • Builder Design pattern - Real Time Example [Beverage]
  • Builder Design Pattern - Class Diagram
  • Builder Design Pattern - Implementation [Beverage]
  • Builder Design Pattern - Implementation [Animal Toy]
  • Builder Design Pattern - KeyPoints
  • All Design Patterns Links
  • No comments:

    Post a Comment

    Tutorials