Master Software Architecture & Clean Code!
Subscribe to Ram N Java for clean code, design pattern implementations, and practical Java tutorials!
SUBSCRIBE NOWStructuring Complex Orders with the Builder Pattern
In food ordering and retail management systems, configuring combo meal packages involves assembling multiple distinct components: a main course, side dish, beverage, and dessert. Creating these meal combinations using constructors with numerous parameters makes the codebase fragile, error-prone, and difficult to extend.
The Builder Design Pattern solves this challenge by separating the stepwise preparation of a meal package from its final representation. A dedicated director oversees the construction steps, allowing identical construction processes to produce entirely different meal packages cleanly.
Complete Java Code Walkthrough
Here is an end-to-end, clean Java implementation demonstrating how to build customizable meal packages using the Builder pattern:
// 1. Product Class
class MealPackage {
private String mainItem;
private String sideItem;
private String drink;
private String dessert;
public void setMainItem(String mainItem) { this.mainItem = mainItem; }
public void setSideItem(String sideItem) { this.sideItem = sideItem; }
public void setDrink(String drink) { this.drink = drink; }
public void setDessert(String dessert) { this.dessert = dessert; }
@Override
public String toString() {
return "MealPackage [Main=" + mainItem + ", Side=" + sideItem + ", Drink=" + drink + ", Dessert=" + dessert + "]";
}
}
// 2. Builder Interface
interface MealBuilder {
void buildMainItem();
void buildSideItem();
void buildDrink();
void buildDessert();
MealPackage getMeal();
}
// 3. Concrete Builder: Veg Meal
class VegMealBuilder implements MealBuilder {
private MealPackage meal = new MealPackage();
@Override
public void buildMainItem() { meal.setMainItem("Veggie Burger"); }
@Override
public void buildSideItem() { meal.setSideItem("French Fries"); }
@Override
public void buildDrink() { meal.setDrink("Orange Juice"); }
@Override
public void buildDessert() { meal.setDessert("Fruit Salad"); }
@Override
public MealPackage getMeal() { return this.meal; }
}
// 4. Concrete Builder: Non-Veg Meal
class NonVegMealBuilder implements MealBuilder {
private MealPackage meal = new MealPackage();
@Override
public void buildMainItem() { meal.setMainItem("Crispy Chicken Burger"); }
@Override
public void buildSideItem() { meal.setSideItem("Chicken Wings"); }
@Override
public void buildDrink() { meal.setDrink("Cold Soda"); }
@Override
public void buildDessert() { meal.setDessert("Chocolate Brownie"); }
@Override
public MealPackage getMeal() { return this.meal; }
}
// 5. Director Class
class MealDirector {
private MealBuilder mealBuilder;
public MealDirector(MealBuilder mealBuilder) {
this.mealBuilder = mealBuilder;
}
public void constructMeal() {
mealBuilder.buildMainItem();
mealBuilder.buildSideItem();
mealBuilder.buildDrink();
mealBuilder.buildDessert();
}
public MealPackage getMeal() {
return mealBuilder.getMeal();
}
}
// 6. Client Application
public class MealBuilderDemo {
public static void main(String[] args) {
// Build Veg Meal
MealBuilder vegBuilder = new VegMealBuilder();
MealDirector vegDirector = new MealDirector(vegBuilder);
vegDirector.constructMeal();
MealPackage vegMeal = vegDirector.getMeal();
System.out.println("Assembled: " + vegMeal);
// Build Non-Veg Meal
MealBuilder nonVegBuilder = new NonVegMealBuilder();
MealDirector nonVegDirector = new MealDirector(nonVegBuilder);
nonVegDirector.constructMeal();
MealPackage nonVegMeal = nonVegDirector.getMeal();
System.out.println("Assembled: " + nonVegMeal);
}
}
Key Architectural Benefits
- Step-by-Step Construction Control: Guarantees that all required parts of the meal package are built in a controlled, ordered workflow.
- Decoupled Presentation: The client code interacts solely with the director and receives fully formed objects, avoiding partially initialized instances.
- Scalable Variations: New meal combos (such as a
KidsMealBuilder) can be integrated effortlessly without modifying existing classes.
Watch More Related Design Pattern Tutorials
Click here to watch in Youtube : https://www.youtube.com/watch?v=Okw_XkQaXtE
| Builder Design pattern - Real Time Example |
See also:
