추상 팩토리는 생성(Creational) 패턴의 하나로, 관련된 객체들의 집합을 생성하기 위한 인터페이스를 제공합니다.
// 추상 제품 - 버튼
interface Button {
void render();
}
// 추상 제품 - 체크박스
interface Checkbox {
void render();
}
// 라이트 테마 버튼
class LightButton implements Button {
@Override
public void render() {
System.out.println("Rendering light theme button");
}
}
// 다크 테마 버튼
class DarkButton implements Button {
@Override
public void render() {
System.out.println("Rendering dark theme button");
}
}
// 라이트 테마 체크박스
class LightCheckbox implements Checkbox {
@Override
public void render() {
System.out.println("Rendering light theme checkbox");
}
}
// 다크 테마 체크박스
class DarkCheckbox implements Checkbox {
@Override
public void render() {
System.out.println("Rendering dark theme checkbox");
}
}
// 추상 팩토리 인터페이스
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
// 구체적인 팩토리 - 라이트 테마
class LightThemeFactory implements GUIFactory {
@Override
public Button createButton() {
return new LightButton();
}
@Override
public Checkbox createCheckbox() {
return new LightCheckbox();
}
}
// 구체적인 팩토리 - 다크 테마
class DarkThemeFactory implements GUIFactory {
@Override
public Button createButton() {
return new DarkButton();
}
@Override
public Checkbox createCheckbox() {
return new DarkCheckbox();
}
}
// 클라이언트 코드
class Application {
private Button button;
private Checkbox checkbox;
public Application(GUIFactory factory) {
button = factory.createButton();
checkbox = factory.createCheckbox();
}
public void render() {
button.render();
checkbox.render();
}
}
// 메인 클래스
public class Main {
public static void main(String[] args) {
// 라이트 테마 사용
Application lightApp = new Application(new LightThemeFactory());
System.out.println("Light Theme:");
lightApp.render();
System.out.println("\nDark Theme:");
// 다크 테마로 쉽게 전환
Application darkApp = new Application(new DarkThemeFactory());
darkApp.render();
}
}
추상 제품 (Abstract Products):
구체적 제품 (Concrete Products):
추상 팩토리 (Abstract Factory):
구체적 팩토리 (Concrete Factories):