본문 바로가기
개발/디자인 패턴

[Java 언어로 배우는 디자인 패턴 입문] 하위 클래스 위임 4. Factory Method

by hongdor 2021. 1. 7.
728x90

출처 : 책 - java 언어로 배우는 디자인 패턴 입문

 

4. Factory Method - 하위 클래스에서 인스턴스 작성하기

 

 

1. 목적

  - 반환 인스턴스종류를 하위 클래스에서 결정 해주는 방식이다.

 

  - new를 사용해서 인스턴스를 생성하는 대신에, 인스턴스 생성 메소드를 호출해서 구체적인 클래스 이름에 의한 속박에서

    상퀴 클래스를 자유롭게 만든다

   > 내가 이해하기로는, 인스턴스를 인터페이스로 받으면 혹시나 클래스 이름 바뀌거나 했을 때

      하나하나 바꿔주지 않아도 되는 장점이 있다. 

 

 

2. 예시

 

(1) Factory 추상 클래스

public abstract class Factory {
    public final Product create(String owner) {
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }
    protected abstract Product createProduct(String owner);
    protected abstract void registerProduct(Product product);
}

 

(2) Factory 구현 IDCardFactory

public class IDCardFactory extends Factory {
    private List owners = new ArrayList();
    protected Product createProduct(String owner) {
        return new IDCard(owner);
    }
    protected void registerProduct(Product product) {
        owners.add(((IDCard)product).getOwner());
    }
    public List getOwners() {
        return owners;
    }
}

 

(3) Product

package framework;

public abstract class Product {
    public abstract void use();
}

 

(4) Product 구현 IDCard

public class IDCard extends Product {
    private String owner;
    IDCard(String owner) {
        System.out.println(owner + "의 카드를 만듭니다.");
        this.owner = owner;
    }
    public void use() {
        System.out.println(owner + "의 카드를 사용합니다.");
    }
    public String getOwner() {
        return owner;
    }
}

 

(5) Main

public class Main {
    public static void main(String[] args) {
        Factory factory = new IDCardFactory();
        Product card1 = factory.create("홍길동");
        Product card2 = factory.create("이순신");
        Product card3 = factory.create("강감찬");
        card1.use();
        card2.use();
        card3.use();
    }
}

> IDCard 인스턴스를 Product로 받고 있다. Main 클래스가 IDCard에 대해 의존하고 있지 않게 된것이다.

728x90

댓글