Master Software Architecture & Clean Code!
Subscribe to Ram N Java for clean code, design pattern implementations, and practical Java tutorials!
SUBSCRIBE NOWUnderstanding 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
Clientinstantiates a concrete builder object (e.g.,ConcreteBuilder). - Step 2 (Configuration): The
Clientcreates theDirector, passing theConcreteBuilderinstance via constructor injection or a setter method. - Step 3 (Orchestration): The
Clientcallsdirector.construct(). - Step 4 (Stepwise Build Messages): The
Directorissues ordered messages to the builder interface (such asbuilder.buildPartA(),builder.buildPartB()). The builder continuously updates the internalProductstate. - Step 5 (Retrieval): The
Clientinvokesbuilder.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
| Builder Design pattern - Sequence Diagram |
See also:
No comments:
Post a Comment