디자인패턴

팩토리 메서드 패턴

솜사탕코튼 2022. 12. 20. 12:09

제품을 추상화 한 Product 인터페이스

public interface Product {
    void use();
}

 

제품 중 하나인 IDCard 클래스

public class IDCard implements Product{

    private final String owner;

    public IDCard(String owner) {
        this.owner = owner;
    }

    @Override
    public void use() {
        System.out.println(owner + "님의 카드를 사용합니다.");
    }
}

Factory 인터페이스

public interface Factory {
    Product createProduct(String name);
}

구체적인 객체를 생성해주는 IDCardFactory

public class IDCardFactory implements Factory{

    @Override
    public Product createProduct(String name) {
        return new IDCard(name);
    }
}

 

Main 클래스

import org.example.factory.IDCardFactory;
import org.example.factory.Product;

public class Main {
    public static void main(String[] args) {
        IDCardFactory factory = new IDCardFactory();
        Product idCard1 = factory.createProduct("홍길동");
        Product idCard2 = factory.createProduct(" 한석봉");

        idCard1.use();
        idCard2.use();
    }
}
  • 객체를 생성하는 메서드는 노출이 되어있지만 그 안의 코드들은 숨겨져 있는 것
  • 실제로 Main에서 IDCard 자체는 import를 하지 않고 있는데 기능은 사용하고 있다
  • 결합도가 떨어진다(Main에서 IDCard 를 import 하지 않음)