CODESAMPLE

Abstract Factory - Java

Share on:

The Abstract Factory pattern is a creational design pattern that provides an interface for creating families of related or dependent objects without specifying their concrete classes. It’s a “factory of factories,” allowing you to switch between different “looks and feels” or object configurations easily.

The Java code demonstrates this by defining an AbstractFactory interface with a method to create buttons. Concrete factories, WindowsButtonFactory and MacButtonFactory, implement this interface to produce platform-specific buttons. A Client class uses the abstract factory to obtain buttons without knowing their concrete implementation, promoting loose coupling and flexibility. This approach aligns with Java’s OOP principles and interface-based programming, making it easily extensible for new platforms or button types.

// AbstractFactory.java
interface ButtonFactory {
    Button createButton();
}

// ConcreteFactory.java
class WindowsButtonFactory implements ButtonFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }
}

class MacButtonFactory implements ButtonFactory {
    @Override
    public Button createButton() {
        return new MacButton();
    }
}

// Product.java
interface Button {
    void click();
}

class WindowsButton implements Button {
    @Override
    public void click() {
        System.out.println("Windows Button Clicked");
    }
}

class MacButton implements Button {
    @Override
    public void click() {
        System.out.println("Mac Button Clicked");
    }
}

// Client.java
public class Client {
    public static void main(String[] args) {
        ButtonFactory factory;

        // Create Windows buttons
        factory = new WindowsButtonFactory();
        Button windowsButton = factory.createButton();
        windowsButton.click();

        // Create Mac buttons
        factory = new MacButtonFactory();
        Button macButton = factory.createButton();
        macButton.click();
    }
}