Singleton and Builder Design Patterns Implementation

Singleton Pattern

Ensures a class has only one instance while providing a global access point.

Eager Enitialization

public class EagerSingleton {
    private EagerSingleton() {}
    
    private static final EagerSingleton INSTANCE = new EagerSingleton();
    
    public static EagerSingleton getInstance() {
        return INSTANCE;
    }
}

Lazy Initialization with Synchronization

public class LazySingleton {
    private LazySingleton() {}
    
    private static LazySingleton instance;
    
    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

Double-Checked Locking

public class DCLSingleton {
    private DCLSingleton() {}
    
    private static volatile DCLSingleton instance;
    
    public static DCLSingleton getInstance() {
        if (instance == null) {
            synchronized (DCLSingleton.class) {
                if (instance == null) {
                    instance = new DCLSingleton();
                }
            }
        }
        return instance;
    }
}

Enum Singleton

public enum EnumSingleton {
    INSTANCE;
    
    public void execute() {
        System.out.println("Enum singleton operation");
    }
}

Builder Pattern

Separates object construction from its representation.

Product Clas

public class Computer {
    private String cpu;
    private String ram;
    private String storage;
    
    // Getters and setters
}

Abstract Builder

public abstract class ComputerBuilder {
    protected Computer computer = new Computer();
    
    public abstract void buildCPU();
    public abstract void buildRAM();
    public abstract void buildStorage();
    
    public Computer getComputer() {
        return computer;
    }
}

Cnocrete Builder

public class GamingComputerBuilder extends ComputerBuilder {
    @Override
    public void buildCPU() {
        computer.setCpu("Intel i9");
    }
    
    @Override
    public void buildRAM() {
        computer.setRam("32GB DDR5");
    }
    
    @Override
    public void buildStorage() {
        computer.setStorage("1TB NVMe SSD");
    }
}

Director

public class ComputerDirector {
    public Computer construct(ComputerBuilder builder) {
        builder.buildCPU();
        builder.buildRAM();
        builder.buildStorage();
        return builder.getComputer();
    }
}

Tags: design-patterns singleton builder java object-oriented

Posted on Fri, 30 Oct 2026 16:45:58 +0000 by unibroue