목적
- 종속적인 객체의 집합을 생성하는 인터페이스를 제공
- 구체적인 클래스 명시 없이도 객체의 집합을 생성가능하다.
의의
- 유현성과 확장성 증대
- 구체적인 팩토리 클래스를 캡슐화
- 일련의 관련 객체 생성가능
- 인터페이스를 통해 객체를 생성하고 조작가능
- 시스템의 독립성과 확장성이 증대된다.
버튼과 체크박스를 통한 팩토리 메서드
public interface Button {
void render();
}
- 버튼이라는 인터페이스
- render 하는 기능을 구현을 강제하기 위하여 생성
// Concrete Product A1
class RoundButton implements Button {
public void render() {
System.out.println("Rendering Round Button");
}
}
// Concrete Product A2
class SquareButton implements Button {
public void render() {
System.out.println("Rendering Square Button");
}
}
- 각각 둥근 버튼과 사각형 버튼은 Button 인터페이스를 상속받아
- 각각 다른 모양의 버튼을 렌더링할 수 있도록 한다.
// Abstract Product B
interface Checkbox {
void render();
}
// Concrete Product B1
class RoundCheckbox implements Checkbox {
public void render() {
System.out.println("Rendering Round Checkbox");
}
}
// Concrete Product B2
class SquareCheckbox implements Checkbox {
public void render() {
System.out.println("Rendering Square Checkbox");
}
}
- 체크박스도 동일한 방식으로 만든다.
// Abstract Factory
interface GuiFactory {
Button createButton();
Checkbox createCheckbox();
}
- GuiFactory 인터페이스 → 추상 팩토리가 된다.
- 무조건적으로 Button 과 체크박스를 생성하여 객체의 집합을 만들도록 제약한다.
// Concrete Factory 1
class RoundGuiFactory implements GuiFactory {
public Button createButton() {
return new RoundButton();
}
public Checkbox createCheckbox() {
return new RoundCheckbox();
}
}
// Concrete Factory 2
class SquareGuiFactory implements GuiFactory {
public Button createButton() {
return new SquareButton();
}
public Checkbox createCheckbox() {
return new SquareCheckbox();
}
}
- 둥근Gui 와 사각형 Gui 팩토리가 각각 추상 팩토리 인터페이스를 구현하여
- 각각 클래스 기능에 맞는 버튼을 생성한다.
// Client code
public class Client {
private Button button;
private Checkbox checkbox;
public Client(GuiFactory factory) {
button = factory.createButton();
checkbox = factory.createCheckbox();
}
public void render() {
button.render();
checkbox.render();
}
public static void main(String[] args) {
Client roundClient = new Client(new RoundGuiFactory());
roundClient.render();
Client squareClient = new Client(new SquareGuiFactory());
squareClient.render();
}
}
- 팩토리클래스를 생성자로 받습니다.
- 그로인하여 별도의 if-else 나 switch 등의 분기에서 탈출할 수 있게 되며
- 개발 사용자에게 오로지 어떤 클래스를 생성할 것인지 선택하는 분기만을 제공하여 집중도를 증대시키며
- 코드 유지보수성면에서 객체의 생성의 확장성에 대해 이점을 가집니다.
추상 팩토리 패턴은 Factory of Factories
라고 합니다.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[디자인패턴] 3가지 디자인 패턴의 분류 (0) | 2023.10.07 |
---|---|
[디자인패턴] 생성 패턴 - 팩토리 메서드 (0) | 2023.10.07 |
[6단원]디자인 패턴 - 프록시 패턴 추가예제 (0) | 2023.10.01 |
[6단원]디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2023.09.23 |
[6단원]디자인 패턴 - 템플릿 콜백 패턴(Template Callback Pattern - 견본/회신 패턴) (0) | 2023.09.23 |