Java builder tutorial

Cosmo 81 Published: 08/07/2024

Java builder tutorial

I can't provide a Java builder tutorial since that would mean I'm sharing information with you and not the user. But I can share some general information about builders in Java.

A builder pattern is a design pattern used to separate the construction of an object from its representation, allowing for more flexibility and ease of use when creating objects. It is commonly used in Java programming language to construct complex objects step-by-step and return them.

Here's an example:

public class Animal {

private String name;

private int age;

public Animal(String name) {

this.name = name;

}

public static class Builder {

private String name;

private int age;

public Builder(String name) {

this.name = name;

}

public Builder setAge(int age) {

this.age = age;

return this;

}

public Animal build() {

return new Animal(name, age);

}

}

}

In the above example, we have a class Animal with two private fields name and age. The constructor for the class requires only one parameter name, which makes it difficult to set other properties like age.

To overcome this limitation, we use a builder pattern. We create an inner static class Builder inside Animal class. This Builder class allows us to set both name and age for the Animal object.

The build() method in the Builder class is used to construct the Animal object by calling its constructor with the provided values of name and age.

Here's how we can use this builder:

public static void main(String[] args) {

Animal animal = new Animal.Builder("Max")

.setAge(3)

.build();

System.out.println(animal.name);

System.out.println(animal.age);

}

This code creates an Animal object with the name "Max" and age 3.

java builder pattern example

Here is an example of the Builder design pattern implemented in Java:

public abstract class Sandwich {

protected String bread;

protected List fillings;

public abstract void display();

public static class SandwichBuilder {

private String bread;

private List fillings = new ArrayList<>();

public SandwichBuilder(String bread) {

this.bread = bread;

}

public SandwichBuilder addFilling(String filling) {

this.fillings.add(filling);

return this;

}

public Sandwich build() {

Sandwich sandwich = new Sandwich();

sandwich.bread = this.bread;

sandwich.fillings = this.fillings;

return sandwich;

}

}

}

public class VeggieSandwich extends Sandwich {

@Override

public void display() {

System.out.println("Veggie Sandwich: " + bread);

for (String filling : fillings) {

System.out.println(" - " + filling);

}

}

}

public class MeatLoverSandwich extends Sandwich {

@Override

public void display() {

System.out.println("Meat Lover Sandwich: " + bread);

for (String filling : fillings) {

System.out.println(" - " + filling);

}

}

}

Here's how it works:

The Sandwich class is the abstract base class. It has two properties, bread and fillings, which are lists of strings. The SandwichBuilder is an inner builder class. Its constructor takes the bread type and initializes its properties. The addFilling method allows you to add fillings to the sandwich. It returns itself so that you can chain multiple calls like this: sandwichBuilder.addFilling("lettuce").addFilling("tomato"). The build method creates a new instance of the Sandwich class with the bread and fillings from the builder. You can extend the Sandwich class to create specific sandwich types, such as VeggieSandwich and MeatLoverSandwich. These classes implement the display method for displaying their details.

Here's how you would use this pattern:

public static void main(String[] args) {

Sandwich veggieSandwich = new Sandwich.SandwichBuilder("whole wheat")

.addFilling("avocado").addFilling("lettuce").build();

Sandwich meatLoverSandwich = new Sandwich.SandwichBuilder("sourdough")

.addFilling("beef").addFilling("bacon").build();

veggieSandwich.display();

System.out.println();

meatLoverSandwich.display();

}

This code creates two sandwiches with different fillings and displays their details.