public interface Button { void paint();}public class MacOSButton implements Button { @Override public void paint() { System.out.println("You have created MacOSButton."); }}public class WindowsButton implements Button { @Override public void paint() { System.out.println("You have created WindowsButton."); }}public interface Checkbox { void paint();}public class MacOSCheckbox implements Checkbox { @Override public void paint() { System.out.println("You have created MacOSCheckbox."); }}public class WindowsCheckbox implements Checkbox { @Override public void paint() { System.out.println("You have created WindowsCheckbox."); }}
Factories
public interface GUIFactory { Button createButton(); Checkbox createCheckbox();}public class MacOSFactory implements GUIFactory { @Override public Button createButton() { return new MacOSButton(); } @Override public Checkbox createCheckbox() { return new MacOSCheckbox(); }}public class WindowsFactory implements GUIFactory { @Override public Button createButton() { return new WindowsButton(); } @Override public Checkbox createCheckbox() { return new WindowsCheckbox(); }}
Driver
Note: Application class is not implemented to make it simple, not sure if it is important
public class Demo { private static GUIFactory factory; public static void main(String[] args) { if (System.getProperty("os.name").equals("Windows 10")) { factory = new WindowsFactory(); } else { factory = new MacOSFactory(); } }}