Factory Method 패턴

구름코딩·2020년 10월 23일

Java 디자인 패턴

목록 보기
5/12

인터페이스를 이용해서 클래스와 객체의 결합도를 낮춰서 객체를 생성하는 방법

Factory
팩토리의 인스턴스 생성 자체는 super클래스가 가지고있고, 서브클래스에서 그것을 실제로 구현하는 코드를 위임받아서 작성하는 패턴

public class Main {
    public static void main(String[] args) {
        factory();
    }
    private static void factory()
    {
    //super클래스 Main
    //실제 구현은 IDCard와, IDCradFactory에서 인터페이스를 받아서 구현한다
    //단, Main클래스 어디에도 IDCard클래스는 등장하지 않는다 -> 결합도를 낮춘것
        IDCardFactory factory = new IDCardFactory();
        Product idCard1 = factory.createProduct("최운식");
        Product idCard2 = factory.createProduct("채벼리");
        idCard1.use();
        idCard2.use();

        BookFactory bookFactory = new BookFactory();
        Product javaBook = bookFactory.createProduct("자바 프로그래밍 마스터");
        Product algoBook = bookFactory.createProduct("알고리즘 킹왕짱");

        javaBook.use();
        algoBook.use();
    }
}

출력

최운식님의 카드를 사용합니다
채벼리님의 카드를 사용합니다
자바 프로그래밍 마스터을 읽습니다
알고리즘 킹왕짱을 읽습니다

동일 인터페이스를 사용해서 다른 객체들을 구현한 결과이다. 따로 new를 통해 의존관계를 주지 않고도 인터페이스의 Factory라는 형태의 클래스를 통해서 다양한 형태의 객체를 생성할 수 있다

인터페이스 및 인터페이스 구현 클래스

Factory 인터페이스
public interface Factory {
    Product createProduct(String name);
}
Product 인터페이스
public interface Product {
    void use();
}
Book 클래스
public class Book implements Product{

    String bookName;

    public Book(String bookName) {
        this.bookName = bookName;
    }

    @Override
    public void use() {
        System.out.println(bookName+"을 읽습니다");
    }
}
BookFactory 클래스
public class BookFactory implements Factory{

    @Override
    public Product createProduct(String name) {
        return new Book(name);
    }
}
profile
내꿈은 숲속의잠자는공주

0개의 댓글