import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) {
        BankAccount account = BankAccount.Builder.builder()
                .identification("Alice Johnson", "DNI123456")
                .contact("alice@email.com")
                .accountType("Savings")
                .build();

        System.out.println(account);
    }
}

class BankAccount {

    private final String fullName;
    private final String documentId;
    private final String contact;
    private final String accountType;

    private BankAccount(Builder builder) {
        this.fullName = builder.fullName;
        this.documentId = builder.documentId;
        this.contact = builder.contact;
        this.accountType = builder.accountType;
    }

    // --- Step Interfaces ---
    public interface IdentificationStep {
        ContactStep identification(String fullName, String documentId);
    }
    public interface ContactStep {
        AccountTypeStep contact(String contact);
    }
    public interface AccountTypeStep {
        FinalStep accountType(String type);
    }
    public interface FinalStep {
        BankAccount build();
    }

    // --- Builder Implementation ---
    public static class Builder implements IdentificationStep, ContactStep, AccountTypeStep, FinalStep {
        private String fullName;
        private String documentId;
        private String contact;
        private String accountType;

        public static IdentificationStep builder() {
            return new Builder();
        }

        @Override
        public ContactStep identification(String fullName, String documentId) {
            this.fullName = fullName;
            this.documentId = documentId;
            return this;
        }

        @Override
        public AccountTypeStep contact(String contact) {
            this.contact = contact;
            return this;
        }

        @Override
        public FinalStep accountType(String type) {
            this.accountType = type;
            return this;
        }

        @Override
        public BankAccount build() {
            return new BankAccount(this);
        }
    }

    @Override
    public String toString() {
        return "BankAccount{" +
                "fullName='" + fullName + '\'' +
                ", documentId='" + documentId + '\'' +
                ", contact='" + contact + '\'' +
                ", accountType='" + accountType + '\'' +
                '}';
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: