Skip to content

Abstract Factory Pattern - Design Pattern shorthands

Posted on:April 12, 2021 at 01:00 PM

Table of contents

Open Table of contents

Abstract Factory

Factory আর Abstract Factory এর মধ্যে প্রধান পার্থক্য হল ফাক্টরি মেথড যাস্ট একটা প্রোডাক্ট রিটার্ন করে আর এবস্ট্রাক্ট ফ্যাক্টরি একটা গ্রুপ ওফ প্রোডাক্ট রিটার্ন করে।

যেমন ডার্ক থিক ও লাইট থিম ধরা যায় । ডার্ক থিম নিলে ডার্ক থিমের ফ্যাক্টরি ডার্ক বাটন ও হোয়াইট টেক্সট রিটার্ন করবে, ভাইস ভার্সা। Button:

public interface Button {
    void show();
}
public class DarkButton implements Button{
    @Override
    public void show() {
        System.out.println("Dark Button!");
    }
}
public class WhiteButton implements Button{
    @Override
    public void show() {
        System.out.println("White Button!");
    }
}

Text:

public interface Text{
    void show();
}
public class DarkText implements Text{
    @Override
    public void show() {
        System.out.println("Dark Text!");
    }
}
public class WhiteText implements Text{
    @Override
    public void show() {
        System.out.println("White Text!");
    }
}

Creating themes:

public interface ThemeFactory {
    Button getButton();
    Text getText();
}
public class DarkThemeFactory implements ThemeFactory{
    @Override
    public Button getButton() {
        return new DarkButton();
    }

    @Override
    public Text getText() {
        return new WhiteText();
    }
}
public class WhiteThemeFactory implements ThemeFactory{
    @Override
    public Button getButton() {
        return new WhiteButton();
    }

    @Override
    public Text getText() {
        return new DarkText();
    }
}

For switching themes:

public class ThemeLoader {

    ThemeFactory themeFactory=null;

    public ThemeLoader()
    {

    }

    void setThemeFactory(ThemeFactory themeFactory)
    {
        this.themeFactory=themeFactory;
    }

    void showTheme()
    {
        if (themeFactory==null)
        {
            System.out.println("No Theme Has been Set!");
            return;
        }

        themeFactory.getButton().show();
        themeFactory.getText().show();

    }


}

Main Method:

public class AbstractFactoryMain {
    public static void main(String[] args) {
        ThemeLoader themeLoader=new ThemeLoader();

        themeLoader.setThemeFactory(new WhiteThemeFactory());
        themeLoader.showTheme();

        themeLoader.setThemeFactory(new DarkThemeFactory());
        themeLoader.showTheme();
    }
}