본문 바로가기
Java/Design Pattern

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

by hyerann 2020. 7. 19.

Factory Method Pattern

생성의 템플릿 메소드 패턴

학습 목표

  • 팩토리 메소드 패턴에서 템플릿 메소드 패턴이 사용됨을 안다.
  • 팩토리 메소드 패턴에서의 구조와 구현의 분리를 이해하고 구조와 구현의 분리의 장점을 안다.
    • 유연성 ! → 다른 아이템 생성할 때 Item과 Creator만 생성하면 다른 코드의 변화가 없음

기본 설계

예제

요구 사항

  • 게임 아이템과 아이템 생성을 구현해주세요.
    • 아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청합니다.
    • 아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 정보를 남깁니다.
  • 아이템을 생성하는 주체를 ItemCreator로 이름 짓습니다.
  • 아이템은 item이라는 interface로 다룰 수 있도록 합니다.
    • item은 use 함수를 기본 함수로 갖고 있습니다.
  • 현재 아이템의 종류는 체력 회복, 물약, 마력 회복 물약이 있습니다.

 

Item.java

public interface Item {

    void use();
}

 

ItemCreator.java

public abstract class ItemCreator {

    //팩토리 메소드 -> 템플릿 메소드
    public Item create() {

        Item item;

        //step1
        requestItemsInfo();
        //step2
        item = createdItem();
        //step3
        createItemLog();

        return item;
    }

    //아이템을 생성하기 전에 데이터베이스에서 아이템 정보를 요청
    abstract protected void requestItemsInfo();

    //아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 데이터베이스에 아이템 생성 기록을 남김
    abstract protected void createItemLog();

    //아이템을 생성하는 알고리즘
    abstract protected  Item createdItem();
}

 

HpPotion.java

public class HpPotion implements Item {

    @Override
    public void use() {
        System.out.println("체력 회복!");
    }
}

 

MpPotion.java

public class MpPotion implements Item {

    @Override
    public void use() {
        System.out.println("마력 회복!");
    }
}

 

HpCreator.java

public class HpCreator extends ItemCreator {

    @Override
    protected void requestItemsInfo() {
        System.out.println("데이터베이스에서 체력 회복 물약의 정보를 가져옴");
    }

    @Override
    protected void createItemLog() {
        System.out.println("체력 회복 물약을 새로 생성함 " + new Date());
    }

    @Override
    protected Item createdItem() {
        return new HpPotion();
    }
}

 

MpCreator.java

public class MpCreator extends ItemCreator {

    @Override
    protected void requestItemsInfo() {
        System.out.println("데이터베이스에서 마력 회복 물약의 정보를 가져옴");
    }

    @Override
    protected void createItemLog() {
        System.out.println("마력 회복 물략을 새로 생성함 " + new Date());
    }

    @Override
    protected Item createdItem() {
        return new MpPotion();
    }
}

 

Main.java

public class Main {

    public static void main(String[] args) {
        ItemCreator creator;
        Item item;

        creator = new HpCreator();
        item = creator.create();
        item.use();

        creator = new MpCreator();
        item = creator.create();
        item.use();

        //          <결과>
//        데이터베이스에서 체력 회복 물약의 정보를 가져옴
//        체력 회복 물약을 새로 생성함 Sun Jul 19 15:47:50 KST 2020
//        체력 회복
//        데이터베이스에서 마력 회복 물약의 정보를 가져옴
//        마력 회복 물략을 새로 생성함 Sun Jul 19 15:47:50 KST 2020
//        마력 회복
    }
}

 

www.inflearn.com/course/자바-디자인-패턴/dashboard

 

자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런

자바 디자인 패턴 이해하기 강좌 입니다. 여러가지 디자인 패턴들을 알아보며 디자인 패턴에 대한 이해도를 높이도록 도와줍니다. Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예�

www.inflearn.com

 

댓글