[Design Pattern] 팩토리 메소드 패턴

  • 팩토리 메소드 패턴에서 템플릿 메소드 패턴의 사용됨을 안다.
  • 팩토리 메소드 패턴에서의 구조와 구현의 분리를 이해

  • creator 클래스 내에 create 함수가 템플릿 메소드 패턴처럼 여러 단계로 나누어지는 경우가 있다.
  • ex ) oper1 실행 후 oper2 실행 ... 이것을 사용

요구사항

  1. 게임 아이템과 아이템 생성 구현
  2. 아이템을 생성하기 전에 데이터 베이스에서 아이템 정보 요청
  3. 아이템 생성 후 아이템 복제 등 불법 방지를 위해 DB에서 아이템 생성정보를 남김
  4. 아이템을 생성하는 주체를 ItemCreator로 이름을 짓는다.
  5. 아이템은 item이라는 인터페이스로 다룬다( use함수를 기본으로 가지고 있다.)
  6. 현재 아이템의 종류는 체력 회복 물약, 마력 회복 물약이 있다.
public interface Item {
    public void use();
}

public abstract class ItemCreator {
     public Item create(){
         Item item;
        requestItemsInfo();
        item = createItem();
        createItemLog();
         return item;
     }

     abstract protected void requestItemsInfo();
     abstract protected void createItemLog();
     abstract protected Item createItem();
}
public class HpPotion implements Item {
    @Override
    public void use(){
        System.out.println("체력회복");
    }
}

public class MpPotion implements Item {
    @Override
    public void use(){
        System.out.println("마력회복");
    }
}
public class HpCreator extends ItemCreator {
    @Override
    protected void requestItemsInfo(){
        System.out.println("DB 회복 물약 정보 가져오기");
    }

    @Override
    protected void createItemLog(){
        System.out.println("회복 물약 생성" + time);
    }

    @Override
    protected Item createItem(){

        return new HpPotion();
    }
}

public class MpCreator extends ItemCreator {
    @Override
    protected void requestItemsInfo(){
        System.out.println("DB 마력 물약 정보 가져오기");
    }

    @Override
    protected void createItemLog(){
       System.out.println("마력 물약생성" + time);
    }

    @Override
    protected void createItem(){

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

참고

https://www.youtube.com/watch?v=-gyoG-7MHLI

댓글

Designed by JB FACTORY