[디자인패턴] Factory Method Pattern

김나우·2022년 9월 22일
0

출처
이야기's G님 유튜브

Factory Method Pattern

기본 설계

요구 사항

  • 게임 아이템과 아이템 생성을 구현해라

    • 아이템을 생성하기 전에 DB에서 아이템 정보를 요청
    • 아이템 생성 후 DB에 아이템 생성 정보 남김
  • 아이템을 생성하는 주체는 ItemCreator

  • 아이템은 item 이라는 interface로 다룰 수 있어야함.

    • item은 use 함수를 기본 함수로 갖고 있음
  • 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있음

코드

ItemCreator

public abstract class ItemCreator {

    public Item create() {
        
        Item item;

        //step1 : 아이템 정보 가져옴
        requestItemInfo();
        //step2 : 아이템 생성
        item = createItem();
        //step3 : 아이템 생성정보 남김
        createItemLog();

        return item;
    }

    //아이템을 생성하기 전에 DB에서 아이템 정보 요청
    abstract protected void requestItemInfo();

    //아이템을 생성 후 아이템 복제 등의 불법을 방지하기 위해 DB에 아이템 생성정보 남김
    abstract protected void createItemLog();

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

}

아이템을 생성하는 주체 ItemCreator

아이템을 생성하기 전에 DB에서 아이템 정보 요청

아이템 생성 후 DB에 아이템 생성 정보 남김

Item

public interface Item {

    public void use();
}

아이템은 item이라는 인터페이스로 다룸

item은 use 함수를 기본 함수로 가지고 있음

HpPotion & MpPotion

public class HpPotion implements Item {

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

HP 포션과 MP 포션, Item을 상속받아 만들어줌.

HpCreator

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

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

    @Override
    protected Item createItem() {
        //작업
        return new HpPotion();
    }
    
}

ItemCreator를 상속받아 만들어줌.

아이템을 생성하기 전에 정보를 가져오고, 로그를 남긴 다음에 만들어줌

Main

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();
    }
}

데이터 베이스에서 체력 회복 물약의 정보를 가져옴.
체력 회복 물약을 새로 생성 했습니다. Tue Oct 04 22:57:49 KST 2022
체력 회복!
데이터 베이스에서 마력 회복 물약의 정보를 가져옴.
마력 회복 물약을 새로 생성 했습니다. Tue Oct 04 22:57:49 KST 2022
마력 회복!
profile
안녕하세요

0개의 댓글