본문 바로가기
Theory/Design Pattern

Factory Method Pattern

by y.j 2022. 4. 10.
728x90

Factory Method Pattern

object를 생성하는 interface를 정의지만 instantiation할 클래스를 subclass에 위임하는 것이다.

어떤 class를 instantiation할지 subclass에서 결정하기 위해서는 object를 어떻게 생성해야 할까?
어떻게 instantiation를 subclass로 위임할 수 있을까?

Creator클래스 내부에 object를 직접적으로 생성 할 수 있도록 한다. 이것은 Creator클래스가 특정 object를 승인해주고 이 클래스로부터 독립적으로 instantiation를 변경하는 것은 불가능하게 한다.

solution

결합을 느슨하기 위해 Creator Interface를 상속받아 Creator1을 만들고 factoryMethod내에 new Product1을 사용한다.

package FactoryMethodPattern.AbstractFM;

import FactoryMethodPattern.Creator;
import product.Product;
import product.Product1;

public class Creator1 extends Creator {
    @Override
    public Product factoryMethod() {
        return new Product1();
    }
}

Advantages

  • 구현에 대한 의존성을 회피할 수 있다.
    • Creator클래스는 구체적인 클래스를 직접적으로 instantiation하지 않는다.
    • subclass에 instantiation을 위임하기 때문에 독립적이다.

Disadvantages

  • 많은 subclass가 필요하다.
    • 새로운 subclass는 어떤 object가 생성될지에 대하여 정의하거나 변경하여야한다.
    • subclass의 필요성은 클래스 hierarchy가 존재할 때만 좋다.

Abstract Factory Pattern 차이점

  • Abstract Factory Pattern과의 차이점은 factory method는 하나의 method만 가지고 있고, abstract factory는 여러가지 factory method를 가지는 object하는 점이다.

AbstractFactory

public class Factory2 implements AbstractFactory {

    private Product productA;
    private Product productB;

    @Override
    public Product createProductA() {
        System.out.println("Factory2 : Creating a ProductA2 Object");
        return new ProductA2();
    }

    @Override
    public Product createProductB() {
        System.out.println("Factory2 : Creating a ProductB2 Object");
        return new ProductB2();
    }
}

Factory Method

public class Creator1 extends Creator {
    @Override
    public Product factoryMethod() {
        return new Product1();
    }
}
  • Factory Method Pattern은 인스턴화할 subclass의 의존한다.

[전체소스]

https://github.com/jKyounju/adapterPatterns/tree/master/src/FactoryMethodPattern

728x90

'Theory > Design Pattern' 카테고리의 다른 글

Bridge Pattern  (0) 2022.04.24
Prototype Pattern  (0) 2022.04.23
Builder Pattern  (0) 2022.03.29
ABSTRACT FACTORY PATTERN  (0) 2022.03.27
ADAPTER PATTERN  (0) 2021.07.22

댓글