Factory Method

Product 객체를 직접 생성하지 않고 Factory 클래스에서 Product를 만든다.

 

여러 Product 구현체가 있고 그 Product 를 만드는 Factory 구현체가 있다.

각각의 Factory 구현체가 그에 해당하는 Product 객체 생성의 책임을 가지고 있다.

 

객체 생성에 필요한 과정과 메서드를 템플릿 처럼 구성해놓고

과정과 메서드의 내부 동작은 Product 구현체와 Factory 구현체에서 유연하게 만들 수 있다.

장점

생성자와 구현 객체의 강한 결합을 피할 수 있다.

팩토리 메서드를 통해 객체 생성 후 공통으로 할 일을 수행하도록 지정할 수 있다.

캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입을 감출 수 있다.

SRP(Single Responsibility Principle)와 OCP(Open Closed Principle)를 준수한다.

단점

구현체마다 팩토리 클래스가 생성되므로 서브 클래스 수가 매우 많다.

예제.

추상 Product와 구현체
추상 Factory와 구현체

public abstract class Bread {
    BreadResult breadResult = new BreadResult();

    @Override
    public String toString() {
        ....
    }

    public abstract void setType();

    public abstract void setRecipe();
}

 

public abstract class BreadFactory {
    public Bread newBread() {
        Bread bread = this.creatBread();
        bread.setType();
        bread.setRecipe();
        return bread;
    }

    abstract Bread creatBread();
}

 

public class ButterBread extends Bread {

    @Override
    public void setType() {
        super.breadResult.breadType = "butter";
    }

    @Override
    public void setRecipe() {
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        ...
        super.breadResult.recipe = map;
    }
}

 

public class ButterBreadFactory extends BreadFactory {
    @Override
    Bread creatBread() {
        return new ButterBread();
    }
}

 

참고 자료

https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%ED%8C%A9%ED%86%A0%EB%A6%AC-%EB%A9%94%EC%84%9C%EB%93%9CFactory-Method-%ED%8C%A8%ED%84%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90

 

💠 팩토리 메서드(Factory Method) 패턴 - 완벽 마스터하기

Factory Method Pattern 팩토리 메소드 패턴은 객체 생성을 공장(Factory) 클래스로 캡슐화 처리하여 대신 생성하게 하는 생성 디자인 패턴이다. 즉, 클라이언트에서 직접 new 연산자를 통해 제품 객체를

inpa.tistory.com

https://gdtbgl93.tistory.com/19

 

[디자인패턴] 팩토리 메소드 패턴 (Factory-Method Pattern)

팩토리 메서드 패턴(Factory method pattern)은 객체지향 디자인 패턴이다. Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성

gdtbgl93.tistory.com

'Language > Java' 카테고리의 다른 글

Jmeter STOMP test (WebSocket Samplers)  (0) 2024.01.27
java thread (자바의 정석)  (1) 2023.12.10
java object equals  (0) 2023.08.08
자바) ArrayList LinkedList 시간 비교 (23-07-06)  (0) 2023.07.13
자바) ArrayList Capacity (23-07-06)  (0) 2023.07.13